Setup

Load Packages

##Install Packages if Needed
if (!require("ggplot2")) install.packages("ggplot2")
if (!require("cowplot")) install.packages("cowplot")
if (!require("Rmisc")) install.packages("Rmisc")
if (!require("lme4")) install.packages("lme4")
if (!require("vegan")) install.packages("vegan")
if (!require("corrplot")) install.packages("corrplot")
if (!require("DHARMa")) install.packages("DHARMa")
if (!require("effectsize")) install.packages("effectsize")
if (!require("emmeans")) install.packages("emmeans")
if (!require("Hmisc")) install.packages("Hmisc")
if (!require("dplyr")) install.packages("dplyr")
if (!require("tidyr")) install.packages("tidyr")

##Load Packages
library(ggplot2) #Required for ggplots
library(cowplot) #Required for plotting panel figures
library(Rmisc) #Required for SummarySE function
library(lme4) #Required for mixed effects modeling
library(vegan) #Required for multivariate analysis PERM
library(corrplot) #Required for correlation plot
library(DHARMa) #Required to check residuals of mixed effects models
library(effectsize) #Required for eta_squared effect sizes
library(emmeans) #Required for pairwise comparisons 
library(Hmisc) #Required for correlations
library(dplyr) #Required for dataframe organization
library(tidyr) #Required for dataframe organization

Graphing Parameters

#Note: Run "Graphing Parameters" section from 01_ExperimentalSetup.Rmd file

Sample Data and Metadata

Load and Organize Data

##Load Data
#Note: Physiological metrics calculated in 02_PhysiologyMetrics.R file
Coral<-read.csv("Outputs/CoralData.csv", header=TRUE)

##Set factor variables
Coral$TimeP<-factor(Coral$TimeP, levels=c("TP1", "TP2", "TP3", "TP4"))
Coral$Site<-factor(Coral$Site, levels=c("KL", "SS"))
Coral$Genotype<-factor(Coral$Genotype, levels=c("AC8", "AC10", "AC12"))
Coral$Orig<-factor(Coral$Orig, levels=c("N", "T"))
Coral$Origin<-factor(Coral$Origin, levels=c("Native", "Transplant"))
Coral$Site.Orig<-factor(Coral$Site.Orig, levels=c("KL.N", "KL.T", "SS.N", "SS.T"))

Multivariate Analysis

adonis OmegaSq Function

#' Calculate (partial) Omega-squared (effect-size calculation) for PERMANOVA and add it to the input object
#'
#' @param adonisOutput An adonis object
#' @param partial Should partial omega-squared be calculated (sample size adjusted). Default TRUE
#' @return Original adonis object with the (partial) Omega-squared values added
#' @import vegan
#' @export
adonis_OmegaSq <- function(adonisOutput, partial = TRUE){
    if(!(is(adonisOutput, "adonis") || is(adonisOutput, "anova.cca")))
        stop("Input should be an adonis object")
    if (is(adonisOutput, "anova.cca")) {
        aov_tab <- adonisOutput
        aov_tab$MeanSqs <- aov_tab$SumOfSqs / aov_tab$Df
        aov_tab$MeanSqs[length(aov_tab$Df)] <- NA
    } else {
        aov_tab <- adonisOutput$aov.tab
    }
    heading <- attr(aov_tab, "heading")
    MS_res <- aov_tab[pmatch("Residual", rownames(aov_tab)), "MeanSqs"]
    SS_tot <- aov_tab[rownames(aov_tab) == "Total", "SumsOfSqs"]
    N <- aov_tab[rownames(aov_tab) == "Total", "Df"] + 1
    if(partial){
        omega <- apply(aov_tab, 1, function(x) (x["Df"]*(x["MeanSqs"]-MS_res))/(x["Df"]*x["MeanSqs"]+(N-x["Df"])*MS_res))
        aov_tab$parOmegaSq <- c(omega[1:(length(omega)-2)], NA, NA)
    } else {
        omega <- apply(aov_tab, 1, function(x) (x["SumsOfSqs"]-x["Df"]*MS_res)/(SS_tot+MS_res))
        aov_tab$OmegaSq <- c(omega[1:(length(omega)-2)], NA, NA)
    }
    if (is(adonisOutput, "adonis"))
        cn_order <- c("Df", "SumsOfSqs", "MeanSqs", "F.Model", "R2",
                      if (partial) "parOmegaSq" else "OmegaSq", "Pr(>F)")
    else
        cn_order <- c("Df", "SumOfSqs", "F", if (partial) "parOmegaSq" else "OmegaSq",
                      "Pr(>F)")
    aov_tab <- aov_tab[, cn_order]
    attr(aov_tab, "names") <- cn_order
    attr(aov_tab, "heading") <- heading
    if (is(adonisOutput, "adonis"))
        adonisOutput$aov.tab <- aov_tab
    else
        adonisOutput <- aov_tab
    return(adonisOutput)
}

Check Correlation

##Remove NA's
names(Coral)
 [1] "ID"              "RandN"           "TimeP"           "Site"            "Genotype"       
 [6] "Orig"            "Origin"          "Set"             "Site.Orig"       "SA_cm2"         
[11] "TP_ug.cm2_C"     "TP_ug.cm2_S"     "AFDW_mg.cm2_C"   "AFDW_mg.cm2_S"   "AFDW_mg.cm2_S.C"
[16] "Chl_ug.cm2"     
Coral.rm<-na.omit(Coral)

##Log +1 transform 
Coral.log<-Coral.rm
Coral.log[,-c(1:10)]<-log(Coral.rm[,-c(1:10)]+1)
  
Phys.cor<-rcorr(as.matrix(Coral.log[,-c(1:10)]), type="pearson")
Phys.cor
                TP_ug.cm2_C TP_ug.cm2_S AFDW_mg.cm2_C AFDW_mg.cm2_S AFDW_mg.cm2_S.C Chl_ug.cm2
TP_ug.cm2_C            1.00        0.56          0.55          0.48            0.03       0.37
TP_ug.cm2_S            0.56        1.00          0.37          0.41            0.08       0.16
AFDW_mg.cm2_C          0.55        0.37          1.00          0.37           -0.49       0.33
AFDW_mg.cm2_S          0.48        0.41          0.37          1.00            0.60       0.50
AFDW_mg.cm2_S.C        0.03        0.08         -0.49          0.60            1.00       0.20
Chl_ug.cm2             0.37        0.16          0.33          0.50            0.20       1.00

n= 190 


P
                TP_ug.cm2_C TP_ug.cm2_S AFDW_mg.cm2_C AFDW_mg.cm2_S AFDW_mg.cm2_S.C Chl_ug.cm2
TP_ug.cm2_C                 0.0000      0.0000        0.0000        0.6401          0.0000    
TP_ug.cm2_S     0.0000                  0.0000        0.0000        0.2762          0.0248    
AFDW_mg.cm2_C   0.0000      0.0000                    0.0000        0.0000          0.0000    
AFDW_mg.cm2_S   0.0000      0.0000      0.0000                      0.0000          0.0000    
AFDW_mg.cm2_S.C 0.6401      0.2762      0.0000        0.0000                        0.0049    
Chl_ug.cm2      0.0000      0.0248      0.0000        0.0000        0.0049                    
diag(Phys.cor$P)<-0

corrplot(Phys.cor$r, type="upper", order="hclust", 
         p.mat = Phys.cor$P, sig.level = 0.01, insig = "blank")

##Remove NA's
names(Coral)
 [1] "ID"              "RandN"           "TimeP"           "Site"            "Genotype"       
 [6] "Orig"            "Origin"          "Set"             "Site.Orig"       "SA_cm2"         
[11] "TP_ug.cm2_C"     "TP_ug.cm2_S"     "AFDW_mg.cm2_C"   "AFDW_mg.cm2_S"   "AFDW_mg.cm2_S.C"
[16] "Chl_ug.cm2"     
Coral.rm<-na.omit(Coral)

##Log +1 transform 
Coral.log<-Coral.rm
Coral.log[,-c(1:10)]<-log(Coral.rm[,-c(1:10)]+1)
  
Phys.cor<-rcorr(as.matrix(Coral.log[,-c(1:10)]), type="pearson")
Phys.cor
                TP_ug.cm2_C TP_ug.cm2_S AFDW_mg.cm2_C AFDW_mg.cm2_S AFDW_mg.cm2_S.C Chl_ug.cm2
TP_ug.cm2_C            1.00        0.56          0.55          0.48            0.03       0.37
TP_ug.cm2_S            0.56        1.00          0.37          0.41            0.08       0.16
AFDW_mg.cm2_C          0.55        0.37          1.00          0.37           -0.49       0.33
AFDW_mg.cm2_S          0.48        0.41          0.37          1.00            0.60       0.50
AFDW_mg.cm2_S.C        0.03        0.08         -0.49          0.60            1.00       0.20
Chl_ug.cm2             0.37        0.16          0.33          0.50            0.20       1.00

n= 190 


P
                TP_ug.cm2_C TP_ug.cm2_S AFDW_mg.cm2_C AFDW_mg.cm2_S AFDW_mg.cm2_S.C Chl_ug.cm2
TP_ug.cm2_C                 0.0000      0.0000        0.0000        0.6401          0.0000    
TP_ug.cm2_S     0.0000                  0.0000        0.0000        0.2762          0.0248    
AFDW_mg.cm2_C   0.0000      0.0000                    0.0000        0.0000          0.0000    
AFDW_mg.cm2_S   0.0000      0.0000      0.0000                      0.0000          0.0000    
AFDW_mg.cm2_S.C 0.6401      0.2762      0.0000        0.0000                        0.0049    
Chl_ug.cm2      0.0000      0.0248      0.0000        0.0000        0.0049                    
diag(Phys.cor$P)<-0

corrplot(Phys.cor$r, type="upper", order="hclust", 
         p.mat = Phys.cor$P, sig.level = 0.01, insig = "blank")

TP1

##Subset Timepoint 1 
Coral.log_TP1<-subset(Coral.log, TimeP=="TP1")

PERMANOVA

##PERMANOVA
Coral.TP1.perm<-adonis2(vegdist(Coral.log_TP1[,c(11:14, 16)], "euclidean")~ Coral.log_TP1$Origin * Coral.log_TP1$Site, data=Coral.log_TP1, strata=Coral.log_TP1$Genotype, method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP1.perm)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP1[, c(11:14, 16)], "euclidean") ~ Coral.log_TP1$Origin * Coral.log_TP1$Site, data = Coral.log_TP1, method = "euclidean", strata = Coral.log_TP1$Genotype)
                                        Df SumOfSqs      F parOmegaSq Pr(>F)   
Coral.log_TP1$Origin                     1   0.2789 2.7121   0.034440  0.013 * 
Coral.log_TP1$Site                       1   0.3722 3.6196   0.051750  0.004 **
Coral.log_TP1$Origin:Coral.log_TP1$Site  1   0.3433 3.3384   0.046454  0.004 **
Residual                                44   4.5240                            
Total                                   47   5.5183                            
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin
TP1.disp_orig<-anova(betadisper(vegdist(Coral.log_TP1[,c(11:14, 16)], "euclidean"), Coral.log_TP1$Origin))
TP1.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.01547 0.015468  1.0199 0.3178
Residuals 46 0.69768 0.015167               
##Check dispersion by Site
TP1.disp_site<-anova(betadisper(vegdist(Coral.log_TP1[,c(11:14, 16)], "euclidean"), Coral.log_TP1$Site))
TP1.disp_site
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value  Pr(>F)  
Groups     1 0.04842 0.048424  3.1669 0.08175 .
Residuals 46 0.70338 0.015291                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin:Site
TP1.disp_os<-anova(betadisper(vegdist(Coral.log_TP1[,c(11:14, 16)], "euclidean"), Coral.log_TP1$Origin:Coral.log_TP1$Site))
TP1.disp_os
Analysis of Variance Table

Response: Distances
          Df  Sum Sq   Mean Sq F value Pr(>F)
Groups     3 0.02212 0.0073726  0.5649  0.641
Residuals 44 0.57425 0.0130512               
##Save results
PERM_T1.res<-data.frame(adonis_OmegaSq(Coral.TP1.perm)[1:3,])
PERM_T1.res$Predictor<-c("Origin", "Site", "Origin x Site")
PERM_T1.res$p_DISP<-c(TP1.disp_orig$`Pr(>F)`[1], TP1.disp_site$`Pr(>F)`[1], TP1.disp_os$`Pr(>F)`[1])

Physiology differs significantly by Origin and the effect of Origin differs between Sites.

Effect Size

Calculate Effect Size of Origin for each Site

##KL
##PERMANOVA
Coral.TP1.perm_KL<-adonis2(vegdist(Coral.log_TP1[which(Coral.log_TP1$Site=="KL"),c(11:14, 16)], "euclidean")~ Coral.log_TP1$Origin[which(Coral.log_TP1$Site=="KL")], data=Coral.log_TP1[which(Coral.log_TP1$Site=="KL"),], strata=Coral.log_TP1$Genotype[which(Coral.log_TP1$Site=="KL")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP1.perm_KL)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP1[which(Coral.log_TP1$Site == "KL"), c(11:14, 16)], "euclidean") ~ Coral.log_TP1$Origin[which(Coral.log_TP1$Site == "KL")], data = Coral.log_TP1[which(Coral.log_TP1$Site == "KL"), ], method = "euclidean", strata = Coral.log_TP1$Genotype[which(Coral.log_TP1$Site == "KL")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)
Coral.log_TP1$Origin[which(Coral.log_TP1$Site == "KL")]  1  0.05913 0.6453  -0.015001  0.413
Residual                                                22  2.01586                         
Total                                                   23  2.07498                         
##Check dispersion by Origin
TP1.KL.disp_orig<-anova(betadisper(vegdist(Coral.log_TP1[which(Coral.log_TP1$Site=="KL"),c(11:14, 16)], "euclidean"), Coral.log_TP1$Origin[which(Coral.log_TP1$Site=="KL")]))
TP1.KL.disp_orig
Analysis of Variance Table

Response: Distances
          Df   Sum Sq   Mean Sq F value Pr(>F)
Groups     1 0.002019 0.0020194  0.1424 0.7095
Residuals 22 0.311986 0.0141812               
##SS
##PERMANOVA
Coral.TP1.perm_SS<-adonis2(vegdist(Coral.log_TP1[which(Coral.log_TP1$Site=="SS"),c(11:14, 16)], "euclidean")~ Coral.log_TP1$Origin[which(Coral.log_TP1$Site=="SS")], data=Coral.log_TP1[which(Coral.log_TP1$Site=="SS"),], strata=Coral.log_TP1$Genotype[which(Coral.log_TP1$Site=="SS")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP1.perm_SS)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP1[which(Coral.log_TP1$Site == "SS"), c(11:14, 16)], "euclidean") ~ Coral.log_TP1$Origin[which(Coral.log_TP1$Site == "SS")], data = Coral.log_TP1[which(Coral.log_TP1$Site == "SS"), ], method = "euclidean", strata = Coral.log_TP1$Genotype[which(Coral.log_TP1$Site == "SS")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)    
Coral.log_TP1$Origin[which(Coral.log_TP1$Site == "SS")]  1  0.56298 4.9381    0.14096  0.001 ***
Residual                                                22  2.50815                             
Total                                                   23  3.07113                             
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin
TP1.SS.disp_orig<-anova(betadisper(vegdist(Coral.log_TP1[which(Coral.log_TP1$Site=="SS"),c(11:14, 16)], "euclidean"), Coral.log_TP1$Origin[which(Coral.log_TP1$Site=="SS")]))
TP1.SS.disp_orig
Analysis of Variance Table

Response: Distances
          Df   Sum Sq   Mean Sq F value Pr(>F)
Groups     1 0.000018 0.0000178  0.0015 0.9695
Residuals 22 0.262265 0.0119211               
##Save results
PERM_T1.site.res<-data.frame(adonis_OmegaSq(Coral.TP1.perm_KL)[1,])
PERM_T1.site.res<-rbind(PERM_T1.site.res, data.frame(adonis_OmegaSq(Coral.TP1.perm_SS)[1,]))
PERM_T1.site.res$Predictor<-c("KL Origin", "SS Origin")
PERM_T1.site.res$p_DISP<-c(TP1.KL.disp_orig$`Pr(>F)`[1], TP1.SS.disp_orig$`Pr(>F)`[1])

##Combine results 
PERM_T1.res<-rbind(PERM_T1.res, PERM_T1.site.res)
PERM_T1.res$Timepoint<-rep("T1", nrow(PERM_T1.res))

Variance Partitioning

##Variance Partitioning
Coral.TP1.vp<-varpart(Coral.log_TP1[,c(11:14, 16)], Coral.log_TP1$Origin, Coral.log_TP1$Site, Coral.log_TP1$Genotype)
Coral.TP1.vp$part
No. of explanatory tables: 3 
Total variation (SS): 5.5183 
            Variance: 0.11741 
No. of observations: 48 

Partition table:
##Variance Partitioning
Coral.TP1.vp<-varpart(Coral.log_TP1[,c(11:14, 16)], Coral.log_TP1$Origin, Coral.log_TP1$Site, Coral.log_TP1$Genotype)
Coral.TP1.vp$part
No. of explanatory tables: 3 
Total variation (SS): 5.5183 
            Variance: 0.11741 
No. of observations: 48 

Partition table:
---
Use function ‘rda’ to test significance of fractions of interest
##Check model significance
anova(rda(Coral.log_TP1[,c(11:14, 16)]~ Coral.log_TP1$Origin + Coral.log_TP1$Site + Coral.log_TP1$Genotype))
Permutation test for rda under reduced model
Permutation: free
Number of permutations: 999

Model: rda(formula = Coral.log_TP1[, c(11:14, 16)] ~ Coral.log_TP1$Origin + Coral.log_TP1$Site + Coral.log_TP1$Genotype)
         Df Variance      F Pr(>F)    
Model     4 0.047741 7.3665  0.001 ***
Residual 43 0.069669                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check variance explained by model
RsquareAdj(rda(Coral.log_TP1[,c(11:14, 16)]~ Coral.log_TP1$Origin + Coral.log_TP1$Site + Coral.log_TP1$Genotype))$adj.r.squared*100
[1] 35.1419
##Check effect of Origin 
anova(rda(Coral.log_TP1[,c(11:14, 16)], Coral.log_TP1$Origin))
Permutation test for rda under reduced model
Permutation: free
Number of permutations: 999

Model: rda(X = Coral.log_TP1[, c(11:14, 16)], Y = Coral.log_TP1$Origin)
         Df Variance      F Pr(>F)  
Model     1 0.005933 2.4482  0.059 .
Residual 46 0.111477                
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
anova(rda(Coral.log_TP1[,c(11:14, 16)], Coral.log_TP1$Origin, Coral.log_TP1[,c(4:5)]))
Permutation test for rda under reduced model
Permutation: free
Number of permutations: 999

Model: rda(X = Coral.log_TP1[, c(11:14, 16)], Y = Coral.log_TP1$Origin, Z = Coral.log_TP1[, c(4:5)])
         Df Variance      F Pr(>F)  
Model     1 0.005933 3.6619  0.017 *
Residual 43 0.069669                
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check effect of Site 
anova(rda(Coral.log_TP1[,c(11:14, 16)], Coral.log_TP1$Site))
Permutation test for rda under reduced model
Permutation: free
Number of permutations: 999

Model: rda(X = Coral.log_TP1[, c(11:14, 16)], Y = Coral.log_TP1$Site)
         Df Variance      F Pr(>F)  
Model     1 0.007918 3.3266  0.017 *
Residual 46 0.109492                
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
anova(rda(Coral.log_TP1[,c(11:14, 16)], Coral.log_TP1$Site, Coral.log_TP1[,c(5,7)]))
Permutation test for rda under reduced model
Permutation: free
Number of permutations: 999

Model: rda(X = Coral.log_TP1[, c(11:14, 16)], Y = Coral.log_TP1$Site, Z = Coral.log_TP1[, c(5, 7)])
         Df Variance      F Pr(>F)   
Model     1 0.007918 4.8872  0.003 **
Residual 43 0.069669                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check effect of Genotype 
anova(rda(Coral.log_TP1[,c(11:14, 16)], Coral.log_TP1$Genotype))
Permutation test for rda under reduced model
Permutation: free
Number of permutations: 999

Model: rda(X = Coral.log_TP1[, c(11:14, 16)], Y = Coral.log_TP1$Genotype)
         Df Variance      F Pr(>F)    
Model     2  0.03389 9.1297  0.001 ***
Residual 45  0.08352                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
anova(rda(Coral.log_TP1[,c(11:14, 16)], Coral.log_TP1$Genotype, Coral.log_TP1[,c(4,7)]))
Permutation test for rda under reduced model
Permutation: free
Number of permutations: 999

Model: rda(X = Coral.log_TP1[, c(11:14, 16)], Y = Coral.log_TP1$Genotype, Z = Coral.log_TP1[, c(4, 7)])
         Df Variance      F Pr(>F)    
Model     2 0.033890 10.458  0.001 ***
Residual 43 0.069669                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

The model is significant (p = 0.001) and explains 35.14% of the variance of physiology. The effect of Origin (controlling for Site and Genotype) is significant (p = 0.013) and explains 3.92%. The effect of Site (controlling for Origin and Genotype) is significant (p = 0.001) and explains 5.73%. The effect of Genotype (controlling for Origin and Site) is significant (p = 0.001) and explains 27.27%.

TP2

##Subset Timepoint 2 
Coral.log_TP2<-subset(Coral.log, TimeP=="TP2")

PERMANOVA

##PERMANOVA
Coral.TP2.perm<-adonis2(vegdist(Coral.log_TP2[,c(11:14, 16)], "euclidean")~ Coral.log_TP2$Origin * Coral.log_TP2$Site, data=Coral.log_TP2, strata=Coral.log_TP2$Genotype, method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP2.perm)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP2[, c(11:14, 16)], "euclidean") ~ Coral.log_TP2$Origin * Coral.log_TP2$Site, data = Coral.log_TP2, method = "euclidean", strata = Coral.log_TP2$Genotype)
                                        Df SumOfSqs      F parOmegaSq Pr(>F)    
Coral.log_TP2$Origin                     1   0.0347  0.420   -0.01223  0.655    
Coral.log_TP2$Site                       1   2.0831 25.239    0.33554  0.001 ***
Coral.log_TP2$Origin:Coral.log_TP2$Site  1   0.2762  3.346    0.04660  0.034 *  
Residual                                44   3.6315                             
Total                                   47   6.0255                             
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin
TP2.disp_orig<-anova(betadisper(vegdist(Coral.log_TP2[,c(11:14, 16)], "euclidean"), Coral.log_TP2$Origin))
TP2.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.02892 0.028918  1.1826 0.2825
Residuals 46 1.12482 0.024453               
##Check dispersion by Site
TP2.disp_site<-anova(betadisper(vegdist(Coral.log_TP2[,c(11:14, 16)], "euclidean"), Coral.log_TP2$Site))
TP2.disp_site
Analysis of Variance Table

Response: Distances
          Df  Sum Sq   Mean Sq F value Pr(>F)
Groups     1 0.00701 0.0070126  0.5917 0.4457
Residuals 46 0.54518 0.0118518               
##Check dispersion by Origin:Site
TP2.disp_os<-anova(betadisper(vegdist(Coral.log_TP2[,c(11:14, 16)], "euclidean"), Coral.log_TP2$Origin:Coral.log_TP2$Site))
TP2.disp_os
Analysis of Variance Table

Response: Distances
          Df  Sum Sq   Mean Sq F value Pr(>F)
Groups     3 0.02003 0.0066763  0.6202 0.6057
Residuals 44 0.47364 0.0107645               
##Save results
PERM_T2.res<-data.frame(adonis_OmegaSq(Coral.TP2.perm)[1:3,])
PERM_T2.res$Predictor<-c("Origin", "Site", "Origin x Site")
PERM_T2.res$p_DISP<-c(TP2.disp_orig$`Pr(>F)`[1], TP2.disp_site$`Pr(>F)`[1], TP2.disp_os$`Pr(>F)`[1])

Effect Size

Calculate Effect Size of Origin for each Site

##KL
##PERMANOVA
Coral.TP2.perm_KL<-adonis2(vegdist(Coral.log_TP2[which(Coral.log_TP2$Site=="KL"),c(11:14, 16)], "euclidean")~ Coral.log_TP2$Origin[which(Coral.log_TP2$Site=="KL")], data=Coral.log_TP2[which(Coral.log_TP2$Site=="KL"),], strata=Coral.log_TP2$Genotype[which(Coral.log_TP2$Site=="KL")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP2.perm_KL)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP2[which(Coral.log_TP2$Site == "KL"), c(11:14, 16)], "euclidean") ~ Coral.log_TP2$Origin[which(Coral.log_TP2$Site == "KL")], data = Coral.log_TP2[which(Coral.log_TP2$Site == "KL"), ], method = "euclidean", strata = Coral.log_TP2$Genotype[which(Coral.log_TP2$Site == "KL")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)  
Coral.log_TP2$Origin[which(Coral.log_TP2$Site == "KL")]  1  0.18146 2.5268   0.059813  0.046 *
Residual                                                22  1.57991                           
Total                                                   23  1.76137                           
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin
TP2.KL.disp_orig<-anova(betadisper(vegdist(Coral.log_TP2[which(Coral.log_TP2$Site=="KL"),c(11:14, 16)], "euclidean"), Coral.log_TP2$Origin[which(Coral.log_TP2$Site=="KL")]))
TP2.KL.disp_orig
Analysis of Variance Table

Response: Distances
          Df   Sum Sq   Mean Sq F value Pr(>F)
Groups     1 0.000732 0.0007320  0.0896 0.7675
Residuals 22 0.179698 0.0081681               
##SS
##PERMANOVA
Coral.TP2.perm_SS<-adonis2(vegdist(Coral.log_TP2[which(Coral.log_TP2$Site=="SS"),c(11:14, 16)], "euclidean")~ Coral.log_TP2$Origin[which(Coral.log_TP2$Site=="SS")], data=Coral.log_TP2[which(Coral.log_TP2$Site=="SS"),], strata=Coral.log_TP2$Genotype[which(Coral.log_TP2$Site=="SS")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP2.perm_SS)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP2[which(Coral.log_TP2$Site == "SS"), c(11:14, 16)], "euclidean") ~ Coral.log_TP2$Origin[which(Coral.log_TP2$Site == "SS")], data = Coral.log_TP2[which(Coral.log_TP2$Site == "SS"), ], method = "euclidean", strata = Coral.log_TP2$Genotype[which(Coral.log_TP2$Site == "SS")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)
Coral.log_TP2$Origin[which(Coral.log_TP2$Site == "SS")]  1  0.12937 1.3872   0.015878  0.165
Residual                                                22  2.05163                         
Total                                                   23  2.18100                         
##Check dispersion by Origin
TP2.SS.disp_orig<-anova(betadisper(vegdist(Coral.log_TP2[which(Coral.log_TP2$Site=="SS"),c(11:14, 16)], "euclidean"), Coral.log_TP2$Origin[which(Coral.log_TP2$Site=="SS")]))
TP2.SS.disp_orig
Analysis of Variance Table

Response: Distances
          Df   Sum Sq   Mean Sq F value Pr(>F)
Groups     1 0.006276 0.0062764  0.4698 0.5003
Residuals 22 0.293942 0.0133610               
##Save results
PERM_T2.site.res<-data.frame(adonis_OmegaSq(Coral.TP2.perm_KL)[1,])
PERM_T2.site.res<-rbind(PERM_T2.site.res, data.frame(adonis_OmegaSq(Coral.TP2.perm_SS)[1,]))
PERM_T2.site.res$Predictor<-c("KL Origin", "SS Origin")
PERM_T2.site.res$p_DISP<-c(TP2.KL.disp_orig$`Pr(>F)`[1], TP2.SS.disp_orig$`Pr(>F)`[1])

##Combine results 
PERM_T2.res<-rbind(PERM_T2.res, PERM_T2.site.res)
PERM_T2.res$Timepoint<-rep("T2", nrow(PERM_T2.res))

TP3

##Subset Timepoint 3 
Coral.log_TP3<-subset(Coral.log, TimeP=="TP3")

PERMANOVA

##PERMANOVA
Coral.TP3.perm<-adonis2(vegdist(Coral.log_TP3[,c(11:14, 16)], "euclidean")~ Coral.log_TP3$Origin * Coral.log_TP3$Site, data=Coral.log_TP3, strata=Coral.log_TP3$Genotype, method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP3.perm)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP3[, c(11:14, 16)], "euclidean") ~ Coral.log_TP3$Origin * Coral.log_TP3$Site, data = Coral.log_TP3, method = "euclidean", strata = Coral.log_TP3$Genotype)
                                        Df SumOfSqs       F parOmegaSq Pr(>F)    
Coral.log_TP3$Origin                     1   0.1051  0.7853  -0.004493  0.367    
Coral.log_TP3$Site                       1   1.4021 10.4738   0.164837  0.001 ***
Coral.log_TP3$Origin:Coral.log_TP3$Site  1   0.1024  0.7649  -0.004921  0.410    
Residual                                44   5.8901                              
Total                                   47   7.4997                              
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin
TP3.disp_orig<-anova(betadisper(vegdist(Coral.log_TP3[,c(11:14, 16)], "euclidean"), Coral.log_TP3$Origin))
TP3.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.06528 0.065278  2.0695  0.157
Residuals 46 1.45099 0.031543               
##Check dispersion by Site
TP3.disp_site<-anova(betadisper(vegdist(Coral.log_TP3[,c(11:14, 16)], "euclidean"), Coral.log_TP3$Site))
TP3.disp_site
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.00202 0.002024  0.0609 0.8062
Residuals 46 1.52934 0.033246               
##Check dispersion by Origin:Site
TP3.disp_os<-anova(betadisper(vegdist(Coral.log_TP3[,c(11:14, 16)], "euclidean"), Coral.log_TP3$Origin:Coral.log_TP3$Site))
TP3.disp_os
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     3 0.09225 0.030751   0.975 0.4131
Residuals 44 1.38769 0.031538               
##Save results
PERM_T3.res<-data.frame(adonis_OmegaSq(Coral.TP3.perm)[1:3,])
PERM_T3.res$Predictor<-c("Origin", "Site", "Origin x Site")
PERM_T3.res$p_DISP<-c(TP3.disp_orig$`Pr(>F)`[1], TP3.disp_site$`Pr(>F)`[1], TP3.disp_os$`Pr(>F)`[1])

Effect Size

Calculate Effect Size of Origin for each Site

##KL
##PERMANOVA
Coral.TP3.perm_KL<-adonis2(vegdist(Coral.log_TP3[which(Coral.log_TP3$Site=="KL"),c(11:14, 16)], "euclidean")~ Coral.log_TP3$Origin[which(Coral.log_TP3$Site=="KL")], data=Coral.log_TP3[which(Coral.log_TP3$Site=="KL"),], strata=Coral.log_TP3$Genotype[which(Coral.log_TP3$Site=="KL")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP3.perm_KL)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP3[which(Coral.log_TP3$Site == "KL"), c(11:14, 16)], "euclidean") ~ Coral.log_TP3$Origin[which(Coral.log_TP3$Site == "KL")], data = Coral.log_TP3[which(Coral.log_TP3$Site == "KL"), ], method = "euclidean", strata = Coral.log_TP3$Genotype[which(Coral.log_TP3$Site == "KL")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)
Coral.log_TP3$Origin[which(Coral.log_TP3$Site == "KL")]  1  0.17515 1.5145   0.020987  0.169
Residual                                                22  2.54431                         
Total                                                   23  2.71946                         
##Check dispersion by Origin
TP3.KL.disp_orig<-anova(betadisper(vegdist(Coral.log_TP3[which(Coral.log_TP3$Site=="KL"),c(11:14, 16)], "euclidean"), Coral.log_TP3$Origin[which(Coral.log_TP3$Site=="KL")]))
TP3.KL.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq   Mean Sq F value Pr(>F)
Groups     1 0.00703 0.0070337  0.3193 0.5778
Residuals 22 0.48467 0.0220307               
##SS
##PERMANOVA
Coral.TP3.perm_SS<-adonis2(vegdist(Coral.log_TP3[which(Coral.log_TP3$Site=="SS"),c(11:14, 16)], "euclidean")~ Coral.log_TP3$Origin[which(Coral.log_TP3$Site=="SS")], data=Coral.log_TP3[which(Coral.log_TP3$Site=="SS"),], strata=Coral.log_TP3$Genotype[which(Coral.log_TP3$Site=="SS")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP3.perm_SS)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP3[which(Coral.log_TP3$Site == "SS"), c(11:14, 16)], "euclidean") ~ Coral.log_TP3$Origin[which(Coral.log_TP3$Site == "SS")], data = Coral.log_TP3[which(Coral.log_TP3$Site == "SS"), ], method = "euclidean", strata = Coral.log_TP3$Genotype[which(Coral.log_TP3$Site == "SS")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)
Coral.log_TP3$Origin[which(Coral.log_TP3$Site == "SS")]  1   0.0324 0.2129   -0.03391  0.785
Residual                                                22   3.3458                         
Total                                                   23   3.3782                         
##Check dispersion by Origin
TP3.SS.disp_orig<-anova(betadisper(vegdist(Coral.log_TP3[which(Coral.log_TP3$Site=="SS"),c(11:14, 16)], "euclidean"), Coral.log_TP3$Origin[which(Coral.log_TP3$Site=="SS")]))
TP3.SS.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.07949 0.079485  1.9365  0.178
Residuals 22 0.90301 0.041046               
##Save results
PERM_T3.site.res<-data.frame(adonis_OmegaSq(Coral.TP3.perm_KL)[1,])
PERM_T3.site.res<-rbind(PERM_T3.site.res, data.frame(adonis_OmegaSq(Coral.TP3.perm_SS)[1,]))
PERM_T3.site.res$Predictor<-c("KL Origin", "SS Origin")
PERM_T3.site.res$p_DISP<-c(TP3.KL.disp_orig$`Pr(>F)`[1], TP3.SS.disp_orig$`Pr(>F)`[1])

##Combine results 
PERM_T3.res<-rbind(PERM_T3.res, PERM_T3.site.res)
PERM_T3.res$Timepoint<-rep("T3", nrow(PERM_T3.res))

TP4

##Subset Timepoint 4 
Coral.log_TP4<-subset(Coral.log, TimeP=="TP4")

PERMANOVA

##PERMANOVA
Coral.TP4.perm<-adonis2(vegdist(Coral.log_TP4[,c(11:14, 16)], "euclidean")~ Coral.log_TP4$Origin * Coral.log_TP4$Site, data=Coral.log_TP4, strata=Coral.log_TP4$Genotype, method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP4.perm)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP4[, c(11:14, 16)], "euclidean") ~ Coral.log_TP4$Origin * Coral.log_TP4$Site, data = Coral.log_TP4, method = "euclidean", strata = Coral.log_TP4$Genotype)
                                        Df SumOfSqs       F parOmegaSq Pr(>F)    
Coral.log_TP4$Origin                     1   0.0204  0.1301  -0.019276  0.921    
Coral.log_TP4$Site                       1   2.5446 16.2273   0.248701  0.001 ***
Coral.log_TP4$Origin:Coral.log_TP4$Site  1   0.2287  1.4586   0.009870  0.174    
Residual                                42   6.5861                              
Total                                   45   9.3799                              
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin
TP4.disp_orig<-anova(betadisper(vegdist(Coral.log_TP4[,c(11:14, 16)], "euclidean"), Coral.log_TP4$Origin))
TP4.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.00639 0.006388  0.1952 0.6608
Residuals 44 1.44022 0.032732               
##Check dispersion by Site
TP4.disp_site<-anova(betadisper(vegdist(Coral.log_TP4[,c(11:14, 16)], "euclidean"), Coral.log_TP4$Site))
TP4.disp_site
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.01153 0.011529  0.3704 0.5459
Residuals 44 1.36932 0.031121               
##Check dispersion by Origin:Site
TP4.disp_os<-anova(betadisper(vegdist(Coral.log_TP4[,c(11:14, 16)], "euclidean"), Coral.log_TP4$Origin:Coral.log_TP4$Site))
TP4.disp_os
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     3 0.04203 0.014012  0.4161 0.7423
Residuals 42 1.41428 0.033673               
##Save results
PERM_T4.res<-data.frame(adonis_OmegaSq(Coral.TP4.perm)[1:3,])
PERM_T4.res$Predictor<-c("Origin", "Site", "Origin x Site")
PERM_T4.res$p_DISP<-c(TP4.disp_orig$`Pr(>F)`[1], TP4.disp_site$`Pr(>F)`[1], TP4.disp_os$`Pr(>F)`[1])

Effect Size

Calculate Effect Size of Origin for each Site

##KL
##PERMANOVA
Coral.TP4.perm_KL<-adonis2(vegdist(Coral.log_TP4[which(Coral.log_TP4$Site=="KL"),c(11:14, 16)], "euclidean")~ Coral.log_TP4$Origin[which(Coral.log_TP4$Site=="KL")], data=Coral.log_TP4[which(Coral.log_TP4$Site=="KL"),], strata=Coral.log_TP4$Genotype[which(Coral.log_TP4$Site=="KL")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP4.perm_KL)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP4[which(Coral.log_TP4$Site == "KL"), c(11:14, 16)], "euclidean") ~ Coral.log_TP4$Origin[which(Coral.log_TP4$Site == "KL")], data = Coral.log_TP4[which(Coral.log_TP4$Site == "KL"), ], method = "euclidean", strata = Coral.log_TP4$Genotype[which(Coral.log_TP4$Site == "KL")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)
Coral.log_TP4$Origin[which(Coral.log_TP4$Site == "KL")]  1   0.0676 0.3774  -0.027823  0.681
Residual                                                21   3.7601                         
Total                                                   22   3.8277                         
##Check dispersion by Origin
TP4.KL.disp_orig<-anova(betadisper(vegdist(Coral.log_TP4[which(Coral.log_TP4$Site=="KL"),c(11:14, 16)], "euclidean"), Coral.log_TP4$Origin[which(Coral.log_TP4$Site=="KL")]))
TP4.KL.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.00316 0.003160  0.0776 0.7833
Residuals 21 0.85503 0.040716               
##SS
##PERMANOVA
Coral.TP4.perm_SS<-adonis2(vegdist(Coral.log_TP4[which(Coral.log_TP4$Site=="SS"),c(11:14, 16)], "euclidean")~ Coral.log_TP4$Origin[which(Coral.log_TP4$Site=="SS")], data=Coral.log_TP4[which(Coral.log_TP4$Site=="SS"),], strata=Coral.log_TP4$Genotype[which(Coral.log_TP4$Site=="SS")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP4.perm_SS)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP4[which(Coral.log_TP4$Site == "SS"), c(11:14, 16)], "euclidean") ~ Coral.log_TP4$Origin[which(Coral.log_TP4$Site == "SS")], data = Coral.log_TP4[which(Coral.log_TP4$Site == "SS"), ], method = "euclidean", strata = Coral.log_TP4$Genotype[which(Coral.log_TP4$Site == "SS")])
                                                        Df SumOfSqs     F parOmegaSq Pr(>F)
Coral.log_TP4$Origin[which(Coral.log_TP4$Site == "SS")]  1  0.18154 1.349   0.014948  0.163
Residual                                                21  2.82599                        
Total                                                   22  3.00753                        
##Check dispersion by Origin
TP4.SS.disp_orig<-anova(betadisper(vegdist(Coral.log_TP4[which(Coral.log_TP4$Site=="SS"),c(11:14, 16)], "euclidean"), Coral.log_TP4$Origin[which(Coral.log_TP4$Site=="SS")]))
TP4.SS.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.02157 0.021572    0.81 0.3783
Residuals 21 0.55925 0.026631               
##Save results
PERM_T4.site.res<-data.frame(adonis_OmegaSq(Coral.TP4.perm_KL)[1,])
PERM_T4.site.res<-rbind(PERM_T4.site.res, data.frame(adonis_OmegaSq(Coral.TP4.perm_SS)[1,]))
PERM_T4.site.res$Predictor<-c("KL Origin", "SS Origin")
PERM_T4.site.res$p_DISP<-c(TP4.KL.disp_orig$`Pr(>F)`[1], TP4.SS.disp_orig$`Pr(>F)`[1])

##Combine results 
PERM_T4.res<-rbind(PERM_T4.res, PERM_T4.site.res)
PERM_T4.res$Timepoint<-rep("T4", nrow(PERM_T4.res))

Univariate

TP1

##Subset Timepoint 1 
Coral.TP1<-subset(Coral.rm, TimeP=="TP1")

Protein Host

##Check normality
hist(Coral.TP1$TP_ug.cm2_C)

shapiro.test(Coral.TP1$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP1$TP_ug.cm2_C
W = 0.98637, p-value = 0.8448
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP1<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Prot.C.lme_res_TP1 <- simulateResiduals(fittedModel = Prot.C.lme_TP1, plot = F)
plot(Prot.C.lme_res_TP1)


##Model results
summary(Prot.C.lme_TP1)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP1

REML criterion at convergence: 476.8

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.98711 -0.58176 -0.00143  0.76130  1.61635 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 1703     41.27   
 Residual             2107     45.91   
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)   
(Intercept)              340.714     27.262   2.948  12.498  0.00120 **
OriginTransplant           3.303     18.741  42.000   0.176  0.86096   
SiteSS                    55.261     18.741  42.000   2.949  0.00519 **
OriginTransplant:SiteSS  -31.334     26.504  42.000  -1.182  0.24375   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.344              
SiteSS      -0.344  0.500       
OrgnTrn:SSS  0.243 -0.707 -0.707
eta_squared(Prot.C.lme_TP1)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.02 | [0.00, 1.00]
Site        |           0.18 | [0.04, 1.00]
Origin:Site |           0.03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.C_TP1.res<-data.frame(summary(Prot.C.lme_TP1)$coefficients[-1])
Prot.C_TP1.res$Predictor<-c("Origin", "Site", "Origin x Site")
Error in `$<-.data.frame`(`*tmp*`, Predictor, value = c("Origin", "Site",  : 
  replacement has 3 rows, data has 19
##Check normality
hist(Coral.TP1$TP_ug.cm2_C)

shapiro.test(Coral.TP1$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP1$TP_ug.cm2_C
W = 0.98637, p-value = 0.8448
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP1<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Prot.C.lme_res_TP1 <- simulateResiduals(fittedModel = Prot.C.lme_TP1, plot = F)
plot(Prot.C.lme_res_TP1)

##Check normality
hist(Coral.TP1$TP_ug.cm2_C)

shapiro.test(Coral.TP1$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP1$TP_ug.cm2_C
W = 0.98637, p-value = 0.8448
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP1<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Prot.C.lme_res_TP1 <- simulateResiduals(fittedModel = Prot.C.lme_TP1, plot = F)
plot(Prot.C.lme_res_TP1)

##Check normality
hist(Coral.TP1$TP_ug.cm2_C)

shapiro.test(Coral.TP1$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP1$TP_ug.cm2_C
W = 0.98637, p-value = 0.8448
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP1<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Prot.C.lme_res_TP1 <- simulateResiduals(fittedModel = Prot.C.lme_TP1, plot = F)
plot(Prot.C.lme_res_TP1)

##Check normality
hist(Coral.TP1$TP_ug.cm2_C)

shapiro.test(Coral.TP1$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP1$TP_ug.cm2_C
W = 0.98637, p-value = 0.8448
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP1<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Prot.C.lme_res_TP1 <- simulateResiduals(fittedModel = Prot.C.lme_TP1, plot = F)
plot(Prot.C.lme_res_TP1)


##Model results
summary(Prot.C.lme_TP1)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP1

REML criterion at convergence: 476.8

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.98711 -0.58176 -0.00143  0.76130  1.61635 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 1703     41.27   
 Residual             2107     45.91   
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)   
(Intercept)              340.714     27.262   2.948  12.498  0.00120 **
OriginTransplant           3.303     18.741  42.000   0.176  0.86096   
SiteSS                    55.261     18.741  42.000   2.949  0.00519 **
OriginTransplant:SiteSS  -31.334     26.504  42.000  -1.182  0.24375   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.344              
SiteSS      -0.344  0.500       
OrgnTrn:SSS  0.243 -0.707 -0.707
eta_squared(Prot.C.lme_TP1)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.02 | [0.00, 1.00]
Site        |           0.18 | [0.04, 1.00]
Origin:Site |           0.03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.C_TP1.res<-data.frame(summary(Prot.C.lme_TP1)$coefficients[-1,])
Prot.C_TP1.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.C_TP1.res$EtaSq<-c(eta_squared(Prot.C.lme_TP1)$Eta2)
Prot.C_TP1.res$Response<-rep("Protein Host", nrow(Prot.C_TP1.res))

Protein Symbiont

##Check normality
hist(Coral.TP1$TP_ug.cm2_S)

shapiro.test(Coral.TP1$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP1$TP_ug.cm2_S
W = 0.96018, p-value = 0.1027
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP1<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Prot.S.lme_res_TP1 <- simulateResiduals(fittedModel = Prot.S.lme_TP1, plot = F)
plot(Prot.S.lme_res_TP1)

##Check normality
hist(Coral.TP1$TP_ug.cm2_S)

shapiro.test(Coral.TP1$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP1$TP_ug.cm2_S
W = 0.96018, p-value = 0.1027
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP1<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Prot.S.lme_res_TP1 <- simulateResiduals(fittedModel = Prot.S.lme_TP1, plot = F)
plot(Prot.S.lme_res_TP1)

##Check normality
hist(Coral.TP1$TP_ug.cm2_S)

shapiro.test(Coral.TP1$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP1$TP_ug.cm2_S
W = 0.96018, p-value = 0.1027
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP1<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Prot.S.lme_res_TP1 <- simulateResiduals(fittedModel = Prot.S.lme_TP1, plot = F)
plot(Prot.S.lme_res_TP1)

##Check normality
hist(Coral.TP1$TP_ug.cm2_S)

shapiro.test(Coral.TP1$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP1$TP_ug.cm2_S
W = 0.96018, p-value = 0.1027
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP1<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Prot.S.lme_res_TP1 <- simulateResiduals(fittedModel = Prot.S.lme_TP1, plot = F)
plot(Prot.S.lme_res_TP1)


##Model results
summary(Prot.S.lme_TP1)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP1

REML criterion at convergence: 504.7

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.99771 -0.58981 -0.06134  0.48297  2.49136 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 1613     40.17   
 Residual             4087     63.93   
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)              459.014     29.638   3.945  15.488 0.000111 ***
OriginTransplant           1.258     26.100  42.000   0.048 0.961800    
SiteSS                    42.145     26.100  42.000   1.615 0.113851    
OriginTransplant:SiteSS  -86.531     36.910  42.000  -2.344 0.023864 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.440              
SiteSS      -0.440  0.500       
OrgnTrn:SSS  0.311 -0.707 -0.707
eta_squared(Prot.S.lme_TP1)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.11 | [0.01, 1.00]
Site        |       8.78e-05 | [0.00, 1.00]
Origin:Site |           0.12 | [0.01, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.S_TP1.res<-data.frame(summary(Prot.S.lme_TP1)$coefficients[-1,])
Prot.S_TP1.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.S_TP1.res$EtaSq<-c(eta_squared(Prot.S.lme_TP1)$Eta2)
Prot.S_TP1.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP1.res))

Effect size of Origin for each Site

##KL
Prot.S.lme_TP1_KL<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="KL"),])
summary(Prot.S.lme_TP1_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "KL"), ]

REML criterion at convergence: 254.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.64984 -0.68376 -0.07079  0.30913  2.31492 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 2602     51.01   
 Residual             4223     64.99   
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)   
(Intercept)       459.014     34.918   2.724  13.145  0.00153 **
OriginTransplant    1.258     26.531  20.000   0.047  0.96267   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.380
eta_squared(Prot.S.lme_TP1_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       1.12e-04 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Prot.S.lme_TP1_SS<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="SS"),])
summary(Prot.S.lme_TP1_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "SS"), ]

REML criterion at convergence: 251.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7405 -0.5819 -0.2580  0.6750  2.1154 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  695.5   26.37   
 Residual             3899.6   62.45   
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       501.158     23.596   3.921  21.239  3.4e-05 ***
OriginTransplant  -85.273     25.494  20.000  -3.345  0.00323 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.540
eta_squared(Prot.S.lme_TP1_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.36 | [0.10, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Prot.S_TP1.site.res<-data.frame(rbind(summary(Prot.S.lme_TP1_KL)$coefficients[-1,],
                                      summary(Prot.S.lme_TP1_SS)$coefficients[-1,]))
Prot.S_TP1.site.res$Predictor<-c("KL Origin", "SS Origin")
Prot.S_TP1.site.res$EtaSq<-c(eta_squared(Prot.S.lme_TP1_KL)$Eta2, eta_squared(Prot.S.lme_TP1_SS)$Eta2)
Prot.S_TP1.site.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP1.site.res))

##Combine results 
Prot.S_TP1.res<-rbind(Prot.S_TP1.res, Prot.S_TP1.site.res)
##Summary statistics by Site and Origin
TP1_ProtSym.sum<-summarySE(Coral.TP1, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP1_ProtSym.plot<-ggplot(TP1_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(350, 550)+
  annotate("text", x=2, y=535, label="**", size=sig.sz, fontface="bold"); TP1_ProtSym.plot

##Summary statistics by Site and Origin
TP1_ProtSym.sum<-summarySE(Coral.TP1, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP1_ProtSym.plot<-ggplot(TP1_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(350, 550)+
  annotate("text", x=2, y=535, label="**", size=sig.sz, fontface="bold"); TP1_ProtSym.plot

##Summary statistics by Site and Origin
TP1_ProtSym.sum<-summarySE(Coral.TP1, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP1_ProtSym.plot<-ggplot(TP1_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(350, 550)+
  annotate("text", x=2, y=535, label="**", size=sig.sz, fontface="bold"); TP1_ProtSym.plot

##Summary statistics by Site and Origin
TP1_ProtSym.sum<-summarySE(Coral.TP1, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP1_ProtSym.plot<-ggplot(TP1_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(250, 550)+
  annotate("text", x=2, y=535, label="**", size=sig.sz, fontface="bold"); TP1_ProtSym.plot

Biomass Host

##Check normality
hist(Coral.TP1$AFDW_mg.cm2_C)

shapiro.test(Coral.TP1$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP1$AFDW_mg.cm2_C
W = 0.96547, p-value = 0.1677
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP1<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Bio.C.lme_res_TP1 <- simulateResiduals(fittedModel = Bio.C.lme_TP1, plot = F)
plot(Bio.C.lme_res_TP1)

##Check normality
hist(Coral.TP1$AFDW_mg.cm2_C)

shapiro.test(Coral.TP1$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP1$AFDW_mg.cm2_C
W = 0.96547, p-value = 0.1677
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP1<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Bio.C.lme_res_TP1 <- simulateResiduals(fittedModel = Bio.C.lme_TP1, plot = F)
plot(Bio.C.lme_res_TP1)

##Check normality
hist(Coral.TP1$AFDW_mg.cm2_C)

shapiro.test(Coral.TP1$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP1$AFDW_mg.cm2_C
W = 0.96547, p-value = 0.1677
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP1<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Bio.C.lme_res_TP1 <- simulateResiduals(fittedModel = Bio.C.lme_TP1, plot = F)
plot(Bio.C.lme_res_TP1)

##Check normality
hist(Coral.TP1$AFDW_mg.cm2_C)

shapiro.test(Coral.TP1$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP1$AFDW_mg.cm2_C
W = 0.96547, p-value = 0.1677
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP1<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Bio.C.lme_res_TP1 <- simulateResiduals(fittedModel = Bio.C.lme_TP1, plot = F)
plot(Bio.C.lme_res_TP1)


##Model results
summary(Bio.C.lme_TP1)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP1

REML criterion at convergence: 17.9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.3616 -0.6323  0.1012  0.6827  1.4522 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.006352 0.0797  
 Residual             0.067274 0.2594  
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              1.20320    0.08788  9.02171  13.691 2.43e-07 ***
OriginTransplant        -0.18538    0.10589 42.00000  -1.751   0.0873 .  
SiteSS                  -0.01392    0.10589 42.00000  -0.131   0.8961    
OriginTransplant:SiteSS  0.04772    0.14975 42.00000   0.319   0.7516    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.602              
SiteSS      -0.602  0.500       
OrgnTrn:SSS  0.426 -0.707 -0.707
eta_squared(Bio.C.lme_TP1)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.10 | [0.00, 1.00]
Site        |       4.20e-04 | [0.00, 1.00]
Origin:Site |       2.41e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.C_TP1.res<-data.frame(summary(Bio.C.lme_TP1)$coefficients[-1,])
Bio.C_TP1.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.C_TP1.res$EtaSq<-c(eta_squared(Bio.C.lme_TP1)$Eta2)
Bio.C_TP1.res$Response<-rep("Biomass Host", nrow(Bio.C_TP1.res))

Effect size of Origin for each Site

##KL
Bio.C.lme_TP1_KL<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="KL"),])
summary(Bio.C.lme_TP1_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "KL"), ]

REML criterion at convergence: 1.1

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.61169 -0.43907  0.07185  0.60072  1.71208 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.003322 0.05764 
 Residual             0.047206 0.21727 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)        1.2032     0.0710  5.1663   16.95 9.99e-06 ***
OriginTransplant  -0.1854     0.0887 20.0000   -2.09   0.0496 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.625
eta_squared(Bio.C.lme_TP1_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.18 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.C.lme_TP1_SS<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="SS"),])
summary(Bio.C.lme_TP1_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "SS"), ]

REML criterion at convergence: 15.4

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.9881 -0.5903  0.3895  0.6868  1.3845 

Random effects:
 Groups   Name        Variance  Std.Dev.
 Genotype (Intercept) 0.0002328 0.01526 
 Residual             0.0939949 0.30659 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.18928    0.08894  7.15744   13.37 2.53e-06 ***
OriginTransplant -0.13767    0.12516 20.00012   -1.10    0.284    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.704
eta_squared(Bio.C.lme_TP1_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.06 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.C_TP1.site.res<-data.frame(rbind(summary(Bio.C.lme_TP1_KL)$coefficients[-1,],
                                      summary(Bio.C.lme_TP1_SS)$coefficients[-1,]))
Bio.C_TP1.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.C_TP1.site.res$EtaSq<-c(eta_squared(Bio.C.lme_TP1_KL)$Eta2, eta_squared(Bio.C.lme_TP1_SS)$Eta2)
Bio.C_TP1.site.res$Response<-rep("Biomass Host", nrow(Bio.C_TP1.site.res))

##Combine results 
Bio.C_TP1.res<-rbind(Bio.C_TP1.res, Bio.C_TP1.site.res)
##Summary statistics by Site and Origin
TP1_BioHost.sum<-summarySE(Coral.TP1, measurevar="AFDW_mg.cm2_C", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Host Biomass across Treatments
TP1_BioHost.plot<-ggplot(TP1_BioHost.sum, aes(x=Site, y=AFDW_mg.cm2_C, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_C-se, ymax=AFDW_mg.cm2_C+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"), axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"))+
  labs(x="Site and Origin", y=expression(paste('Host Biomass (mg cm'^-2*")")), colour="Origin")+
  ylim(0, 2)+
   annotate("text", x=1, y=1.5, label="*", size=sig.sz, fontface="bold"); TP1_BioHost.plot

##Summary statistics by Site and Origin
TP1_BioHost.sum<-summarySE(Coral.TP1, measurevar="AFDW_mg.cm2_C", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Host Biomass across Treatments
TP1_BioHost.plot<-ggplot(TP1_BioHost.sum, aes(x=Site, y=AFDW_mg.cm2_C, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_C-se, ymax=AFDW_mg.cm2_C+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz),
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position = "top")+
  labs(x="Site and Origin", y=expression(paste('Host Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.8, 1.6)+
   annotate("text", x=1, y=1.3, label="*", size=sig.sz, fontface="bold"); TP1_BioHost.plot

Biomass Symbionts

##Check normality
hist(Coral.TP1$AFDW_mg.cm2_S)

shapiro.test(Coral.TP1$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP1$AFDW_mg.cm2_S
W = 0.97584, p-value = 0.4194
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP1<-lmer(AFDW_mg.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Bio.S.lme_res_TP1 <- simulateResiduals(fittedModel = Bio.S.lme_TP1, plot = F)
plot(Bio.S.lme_res_TP1)

##Check normality
hist(Coral.TP1$AFDW_mg.cm2_S)

shapiro.test(Coral.TP1$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP1$AFDW_mg.cm2_S
W = 0.97584, p-value = 0.4194
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP1<-lmer(AFDW_mg.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Bio.S.lme_res_TP1 <- simulateResiduals(fittedModel = Bio.S.lme_TP1, plot = F)
plot(Bio.S.lme_res_TP1)

##Check normality
hist(Coral.TP1$AFDW_mg.cm2_S)

shapiro.test(Coral.TP1$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP1$AFDW_mg.cm2_S
W = 0.97584, p-value = 0.4194
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP1<-lmer(AFDW_mg.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Bio.S.lme_res_TP1 <- simulateResiduals(fittedModel = Bio.S.lme_TP1, plot = F)
plot(Bio.S.lme_res_TP1)

##Check normality
hist(Coral.TP1$AFDW_mg.cm2_S)

shapiro.test(Coral.TP1$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP1$AFDW_mg.cm2_S
W = 0.97584, p-value = 0.4194
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP1<-lmer(AFDW_mg.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Bio.S.lme_res_TP1 <- simulateResiduals(fittedModel = Bio.S.lme_TP1, plot = F)
plot(Bio.S.lme_res_TP1)


##Model results
summary(Bio.S.lme_TP1)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP1

REML criterion at convergence: -29.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.71364 -0.74817 -0.06341  0.60227  2.13813 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.002785 0.05277 
 Residual             0.022713 0.15071 
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              0.57323    0.05311  7.72575  10.792 6.25e-06 ***
OriginTransplant         0.01058    0.06153 42.00000   0.172   0.8642    
SiteSS                   0.16334    0.06153 42.00000   2.655   0.0112 *  
OriginTransplant:SiteSS -0.22488    0.08701 42.00000  -2.584   0.0133 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.579              
SiteSS      -0.579  0.500       
OrgnTrn:SSS  0.410 -0.707 -0.707
eta_squared(Bio.S.lme_TP1)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.12 | [0.01, 1.00]
Site        |           0.03 | [0.00, 1.00]
Origin:Site |           0.14 | [0.02, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.S_TP1.res<-data.frame(summary(Bio.S.lme_TP1)$coefficients[-1,])
Bio.S_TP1.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.S_TP1.res$EtaSq<-c(eta_squared(Bio.S.lme_TP1)$Eta2)
Bio.S_TP1.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP1.res))

Effect size of Origin for each Site

##KL
Bio.S.lme_TP1_KL<-lmer(AFDW_mg.cm2_S~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="KL"),])
summary(Bio.S.lme_TP1_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "KL"), ]

REML criterion at convergence: -21.1

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.72868 -0.71431  0.04303  0.52737  1.90341 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.01040  0.1020  
 Residual             0.01508  0.1228  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)   
(Intercept)       0.57323    0.06873  2.65466   8.340  0.00563 **
OriginTransplant  0.01058    0.05014 20.00000   0.211  0.83496   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.365
eta_squared(Bio.S.lme_TP1_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       2.22e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.S.lme_TP1_SS<-lmer(AFDW_mg.cm2_S~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="SS"),])
summary(Bio.S.lme_TP1_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "SS"), ]

REML criterion at convergence: -13.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.2456 -0.7860 -0.1378  0.6402  2.1806 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.004289 0.06549 
 Residual             0.023707 0.15397 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.73657    0.05836  3.90305  12.622 0.000262 ***
OriginTransplant -0.21429    0.06286 20.00000  -3.409 0.002782 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.539
eta_squared(Bio.S.lme_TP1_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.37 | [0.10, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.S_TP1.site.res<-data.frame(rbind(summary(Bio.S.lme_TP1_KL)$coefficients[-1,],
                                     summary(Bio.S.lme_TP1_SS)$coefficients[-1,]))
Bio.S_TP1.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.S_TP1.site.res$EtaSq<-c(eta_squared(Bio.S.lme_TP1_KL)$Eta2, eta_squared(Bio.S.lme_TP1_SS)$Eta2)
Bio.S_TP1.site.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP1.site.res))

##Combine results 
Bio.S_TP1.res<-rbind(Bio.S_TP1.res, Bio.S_TP1.site.res)
##Summary statistics by Site and Origin
TP1_BioSym.sum<-summarySE(Coral.TP1, measurevar="AFDW_mg.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Biomass across Treatments
TP1_BioSym.plot<-ggplot(TP1_BioSym.sum, aes(x=Site, y=AFDW_mg.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_S-se, ymax=AFDW_mg.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"), axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"))+
  labs(x="Site and Origin", y=expression(paste('Symbiont Biomass (mg cm'^-2*")")), colour="Origin")+
  ylim(0, 1)+
  annotate("text", x=2, y=0.85, label="**", size=sig.sz, fontface="bold"); TP1_BioSym.plot

##Summary statistics by Site and Origin
TP1_BioSym.sum<-summarySE(Coral.TP1, measurevar="AFDW_mg.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Biomass across Treatments
TP1_BioSym.plot<-ggplot(TP1_BioSym.sum, aes(x=Site, y=AFDW_mg.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_S-se, ymax=AFDW_mg.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.45, 0.95)+
  annotate("text", x=2, y=0.8, label="**", size=sig.sz, fontface="bold"); TP1_BioSym.plot

Chlorophyll

##Check normality
hist(Coral.TP1$Chl_ug.cm2)

shapiro.test(Coral.TP1$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP1$Chl_ug.cm2
W = 0.95564, p-value = 0.06727
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP1<-lmer(Chl_ug.cm2~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Chl.lme_res_TP1 <- simulateResiduals(fittedModel = Chl.lme_TP1, plot = F)
plot(Chl.lme_res_TP1)

##Check normality
hist(Coral.TP1$Chl_ug.cm2)

shapiro.test(Coral.TP1$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP1$Chl_ug.cm2
W = 0.95564, p-value = 0.06727
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP1<-lmer(Chl_ug.cm2~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Chl.lme_res_TP1 <- simulateResiduals(fittedModel = Chl.lme_TP1, plot = F)
plot(Chl.lme_res_TP1)

##Check normality
hist(Coral.TP1$Chl_ug.cm2)

shapiro.test(Coral.TP1$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP1$Chl_ug.cm2
W = 0.95564, p-value = 0.06727
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP1<-lmer(Chl_ug.cm2~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Chl.lme_res_TP1 <- simulateResiduals(fittedModel = Chl.lme_TP1, plot = F)
plot(Chl.lme_res_TP1)

##Check normality
hist(Coral.TP1$Chl_ug.cm2)

shapiro.test(Coral.TP1$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP1$Chl_ug.cm2
W = 0.95564, p-value = 0.06727
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP1<-lmer(Chl_ug.cm2~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Chl.lme_res_TP1 <- simulateResiduals(fittedModel = Chl.lme_TP1, plot = F)
plot(Chl.lme_res_TP1)


##Model results
summary(Chl.lme_TP1)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Chl_ug.cm2 ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP1

REML criterion at convergence: -0.4

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.1377 -0.5871 -0.1548  0.6976  2.0162 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.08669  0.2944  
 Residual             0.03936  0.1984  
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              0.86074    0.17937  2.34405   4.799 0.029564 *  
OriginTransplant         0.07568    0.08099 42.00000   0.934 0.355451    
SiteSS                   0.54382    0.08099 42.00000   6.715 3.73e-08 ***
OriginTransplant:SiteSS -0.48115    0.11454 42.00000  -4.201 0.000136 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.226              
SiteSS      -0.226  0.500       
OrgnTrn:SSS  0.160 -0.707 -0.707
eta_squared(Chl.lme_TP1)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.16 | [0.03, 1.00]
Site        |           0.40 | [0.21, 1.00]
Origin:Site |           0.30 | [0.12, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Chl_TP1.res<-data.frame(summary(Chl.lme_TP1)$coefficients[-1,])
Chl_TP1.res$Predictor<-c("Origin", "Site", "Origin x Site")
Chl_TP1.res$EtaSq<-c(eta_squared(Chl.lme_TP1)$Eta2)
Chl_TP1.res$Response<-rep("Chlorophyll", nrow(Chl_TP1.res))

Effect size of Origin for each Site

##KL
Chl.lme_TP1_KL<-lmer(Chl_ug.cm2~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="KL"),])
summary(Chl.lme_TP1_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Chl_ug.cm2 ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "KL"), ]

REML criterion at convergence: -4.9

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.42282 -0.68856  0.00126  0.53926  2.32168 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.05037  0.2244  
 Residual             0.02931  0.1712  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)  
(Intercept)       0.86074    0.13868  2.27932   6.207    0.018 *
OriginTransplant  0.07568    0.06989 20.00000   1.083    0.292  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.252
eta_squared(Chl.lme_TP1_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.06 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Chl.lme_TP1_SS<-lmer(Chl_ug.cm2~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="SS"),])
summary(Chl.lme_TP1_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Chl_ug.cm2 ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "SS"), ]

REML criterion at convergence: 2.6

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.0949 -0.5799  0.1160  0.6297  1.7750 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.13767  0.3710  
 Residual             0.03874  0.1968  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.40456    0.22163  2.13798   6.338   0.0203 *  
OriginTransplant -0.40548    0.08035 20.00000  -5.046 6.18e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.181
eta_squared(Chl.lme_TP1_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.56 | [0.30, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Chl_TP1.site.res<-data.frame(rbind(summary(Chl.lme_TP1_KL)$coefficients[-1,],
                                     summary(Chl.lme_TP1_SS)$coefficients[-1,]))
Chl_TP1.site.res$Predictor<-c("KL Origin", "SS Origin")
Chl_TP1.site.res$EtaSq<-c(eta_squared(Chl.lme_TP1_KL)$Eta2, eta_squared(Chl.lme_TP1_SS)$Eta2)
Chl_TP1.site.res$Response<-rep("Chlorophyll", nrow(Chl_TP1.site.res))

##Combine results 
Chl_TP1.res<-rbind(Chl_TP1.res, Chl_TP1.site.res)
##Summary statistics by Site and Origin
TP1_Chl.sum<-summarySE(Coral.TP1, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP1_Chl.plot<-ggplot(TP1_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(0, 2)+
  annotate("text", x=2, y=1.7, label="***", size=sig.sz, fontface="bold"); TP1_Chl.plot

##Summary statistics by Site and Origin
TP1_Chl.sum<-summarySE(Coral.TP1, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP1_Chl.plot<-ggplot(TP1_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(0, 2)+
  annotate("text", x=2, y=1.7, label="***", size=sig.sz, fontface="bold"); TP1_Chl.plot

##Summary statistics by Site and Origin
TP1_Chl.sum<-summarySE(Coral.TP1, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP1_Chl.plot<-ggplot(TP1_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(0, 2)+
  annotate("text", x=2, y=1.7, label="***", size=sig.sz, fontface="bold"); TP1_Chl.plot

##Summary statistics by Site and Origin
TP1_Chl.sum<-summarySE(Coral.TP1, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP1_Chl.plot<-ggplot(TP1_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(0.5, 3.25)+
  annotate("text", x=2, y=1.7, label="***", size=sig.sz, fontface="bold"); TP1_Chl.plot

Save Results

##Combine Results
Phys_T1.res<-rbind(Prot.C_TP1.res, Prot.S_TP1.res, Bio.C_TP1.res, Bio.S_TP1.res, Chl_TP1.res)

##Add Timepoint
Phys_T1.res$TimeP<-rep("T1", nrow(Phys_T1.res))

TP2

##Subset Timepoint 2 
Coral.TP2<-subset(Coral.rm, TimeP=="TP2")

Protein Host

##Check normality
hist(Coral.TP2$TP_ug.cm2_C)

shapiro.test(Coral.TP2$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP2$TP_ug.cm2_C
W = 0.9796, p-value = 0.562
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP2<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Prot.C.lme_res_TP2 <- simulateResiduals(fittedModel = Prot.C.lme_TP2, plot = F)
plot(Prot.C.lme_res_TP2)

##Check normality
hist(Coral.TP2$TP_ug.cm2_C)

shapiro.test(Coral.TP2$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP2$TP_ug.cm2_C
W = 0.9796, p-value = 0.562
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP2<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Prot.C.lme_res_TP2 <- simulateResiduals(fittedModel = Prot.C.lme_TP2, plot = F)
plot(Prot.C.lme_res_TP2)

##Check normality
hist(Coral.TP2$TP_ug.cm2_C)

shapiro.test(Coral.TP2$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP2$TP_ug.cm2_C
W = 0.9796, p-value = 0.562
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP2<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Prot.C.lme_res_TP2 <- simulateResiduals(fittedModel = Prot.C.lme_TP2, plot = F)
plot(Prot.C.lme_res_TP2)

##Check normality
hist(Coral.TP2$TP_ug.cm2_C)

shapiro.test(Coral.TP2$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP2$TP_ug.cm2_C
W = 0.9796, p-value = 0.562
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP2<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Prot.C.lme_res_TP2 <- simulateResiduals(fittedModel = Prot.C.lme_TP2, plot = F)
plot(Prot.C.lme_res_TP2)


##Model results
summary(Prot.C.lme_TP2)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP2

REML criterion at convergence: 469.4

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.67310 -0.67673 -0.00324  0.57592  1.67096 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  391.9   19.80   
 Residual             1877.0   43.32   
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)              315.853     16.942   5.593  18.643    3e-06 ***
OriginTransplant          -1.965     17.687  42.000  -0.111   0.9121    
SiteSS                    42.263     17.687  42.000   2.389   0.0214 *  
OriginTransplant:SiteSS    8.579     25.013  42.000   0.343   0.7333    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.522              
SiteSS      -0.522  0.500       
OrgnTrn:SSS  0.369 -0.707 -0.707
eta_squared(Prot.C.lme_TP2)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       8.22e-04 | [0.00, 1.00]
Site        |           0.25 | [0.08, 1.00]
Origin:Site |       2.79e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.C_TP2.res<-data.frame(summary(Prot.C.lme_TP2)$coefficients[-1,])
Prot.C_TP2.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.C_TP2.res$EtaSq<-c(eta_squared(Prot.C.lme_TP2)$Eta2)
Prot.C_TP2.res$Response<-rep("Protein Host", nrow(Prot.C_TP2.res))

Protein Symbiont

##Check normality
hist(Coral.TP2$TP_ug.cm2_S)

shapiro.test(Coral.TP2$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP2$TP_ug.cm2_S
W = 0.95982, p-value = 0.09929
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP2<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Prot.S.lme_res_TP2 <- simulateResiduals(fittedModel = Prot.S.lme_TP2, plot = F)
plot(Prot.S.lme_res_TP2)

##Check normality
hist(Coral.TP2$TP_ug.cm2_S)

shapiro.test(Coral.TP2$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP2$TP_ug.cm2_S
W = 0.95982, p-value = 0.09929
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP2<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Prot.S.lme_res_TP2 <- simulateResiduals(fittedModel = Prot.S.lme_TP2, plot = F)
plot(Prot.S.lme_res_TP2)

##Check normality
hist(Coral.TP2$TP_ug.cm2_S)

shapiro.test(Coral.TP2$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP2$TP_ug.cm2_S
W = 0.95982, p-value = 0.09929
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP2<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Prot.S.lme_res_TP2 <- simulateResiduals(fittedModel = Prot.S.lme_TP2, plot = F)
plot(Prot.S.lme_res_TP2)

##Check normality
hist(Coral.TP2$TP_ug.cm2_S)

shapiro.test(Coral.TP2$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP2$TP_ug.cm2_S
W = 0.95982, p-value = 0.09929
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP2<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Prot.S.lme_res_TP2 <- simulateResiduals(fittedModel = Prot.S.lme_TP2, plot = F)
plot(Prot.S.lme_res_TP2)


##Model results
summary(Prot.S.lme_TP2)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP2

REML criterion at convergence: 493.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.5114 -0.6809 -0.1247  0.6145  2.6570 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  796.1   28.22   
 Residual             3198.1   56.55   
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)              329.068     23.062   5.046  14.269 2.85e-05 ***
OriginTransplant         -29.475     23.087  42.000  -1.277    0.209    
SiteSS                    43.245     23.087  42.000   1.873    0.068 .  
OriginTransplant:SiteSS   35.173     32.650  42.000   1.077    0.288    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.501              
SiteSS      -0.501  0.500       
OrgnTrn:SSS  0.354 -0.707 -0.707
eta_squared(Prot.S.lme_TP2)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.01 | [0.00, 1.00]
Site        |           0.25 | [0.08, 1.00]
Origin:Site |           0.03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.S_TP2.res<-data.frame(summary(Prot.S.lme_TP2)$coefficients[-1,])
Prot.S_TP2.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.S_TP2.res$EtaSq<-c(eta_squared(Prot.S.lme_TP2)$Eta2)
Prot.S_TP2.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP2.res))

Effect size of Origin for each Site

##KL
Prot.S.lme_TP2_KL<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="KL"),])
summary(Prot.S.lme_TP2_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "KL"), ]

REML criterion at convergence: 238.6

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.4406 -0.8006  0.2111  0.5424  1.7322 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  688.7   26.24   
 Residual             2134.1   46.20   
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       329.068     20.185   3.247  16.303 0.000316 ***
OriginTransplant  -29.475     18.860  20.000  -1.563 0.133770    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.467
eta_squared(Prot.S.lme_TP2_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.11 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Prot.S.lme_TP2_SS<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="SS"),])
summary(Prot.S.lme_TP2_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "SS"), ]

REML criterion at convergence: 251.8

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.3034 -0.8616  0.0128  0.6244  2.1515 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 1484     38.53   
 Residual             3840     61.96   
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       372.313     28.545   3.078  13.043 0.000854 ***
OriginTransplant    5.698     25.297  20.000   0.225 0.824065    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.443
eta_squared(Prot.S.lme_TP2_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       2.53e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Prot.S_TP2.site.res<-data.frame(rbind(summary(Prot.S.lme_TP2_KL)$coefficients[-1,],
                                     summary(Prot.S.lme_TP2_SS)$coefficients[-1,]))
Prot.S_TP2.site.res$Predictor<-c("KL Origin", "SS Origin")
Prot.S_TP2.site.res$EtaSq<-c(eta_squared(Prot.S.lme_TP2_KL)$Eta2, eta_squared(Prot.S.lme_TP2_SS)$Eta2)
Prot.S_TP2.site.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP2.site.res))

##Combine results 
Prot.S_TP2.res<-rbind(Prot.S_TP2.res, Prot.S_TP2.site.res)
##Summary statistics by Site and Origin
TP2_ProtSym.sum<-summarySE(Coral.TP2, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP2_ProtSym.plot<-ggplot(TP2_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(250, 450); TP2_ProtSym.plot

##Summary statistics by Site and Origin
TP2_ProtSym.sum<-summarySE(Coral.TP2, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP2_ProtSym.plot<-ggplot(TP2_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(250, 450); TP2_ProtSym.plot

##Summary statistics by Site and Origin
TP2_ProtSym.sum<-summarySE(Coral.TP2, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP2_ProtSym.plot<-ggplot(TP2_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(250, 450); TP2_ProtSym.plot

##Summary statistics by Site and Origin
TP2_ProtSym.sum<-summarySE(Coral.TP2, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP2_ProtSym.plot<-ggplot(TP2_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(250, 550); TP2_ProtSym.plot

Biomass Host

##Check normality
hist(Coral.TP2$AFDW_mg.cm2_C)

shapiro.test(Coral.TP2$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP2$AFDW_mg.cm2_C
W = 0.98545, p-value = 0.8093
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP2<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Bio.C.lme_res_TP2 <- simulateResiduals(fittedModel = Bio.C.lme_TP2, plot = F)
plot(Bio.C.lme_res_TP2)

##Check normality
hist(Coral.TP2$AFDW_mg.cm2_C)

shapiro.test(Coral.TP2$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP2$AFDW_mg.cm2_C
W = 0.98545, p-value = 0.8093
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP2<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Bio.C.lme_res_TP2 <- simulateResiduals(fittedModel = Bio.C.lme_TP2, plot = F)
plot(Bio.C.lme_res_TP2)

##Check normality
hist(Coral.TP2$AFDW_mg.cm2_C)

shapiro.test(Coral.TP2$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP2$AFDW_mg.cm2_C
W = 0.98545, p-value = 0.8093
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP2<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Bio.C.lme_res_TP2 <- simulateResiduals(fittedModel = Bio.C.lme_TP2, plot = F)
plot(Bio.C.lme_res_TP2)


##Model results
summary(Bio.C.lme_TP2)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP2

REML criterion at convergence: -19.7

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.2645 -0.4732 -0.0846  0.5858  2.5448 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.002429 0.04928 
 Residual             0.028719 0.16947 
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              1.16312    0.05659  9.60683  20.552 2.91e-09 ***
OriginTransplant        -0.10184    0.06918 42.00000  -1.472   0.1485    
SiteSS                  -0.11111    0.06918 42.00000  -1.606   0.1158    
OriginTransplant:SiteSS  0.26062    0.09784 42.00000   2.664   0.0109 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.611              
SiteSS      -0.611  0.500       
OrgnTrn:SSS  0.432 -0.707 -0.707
eta_squared(Bio.C.lme_TP2)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       8.00e-03 | [0.00, 1.00]
Site        |       3.65e-03 | [0.00, 1.00]
Origin:Site |           0.14 | [0.02, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.C_TP2.res<-data.frame(summary(Bio.C.lme_TP2)$coefficients[-1,])
Bio.C_TP2.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.C_TP2.res$EtaSq<-c(eta_squared(Bio.C.lme_TP2)$Eta2)
Bio.C_TP2.res$Response<-rep("Biomass Host", nrow(Bio.C_TP2.res))

Effect size of Origin for each Site

##KL
Bio.C.lme_TP2_KL<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="KL"),])
summary(Bio.C.lme_TP2_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "KL"), ]

REML criterion at convergence: -14.2

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7100 -0.5598 -0.2566  0.3597  2.9272 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.001355 0.03681 
 Residual             0.023645 0.15377 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.16312    0.04921  5.42756  23.634 1.11e-06 ***
OriginTransplant -0.10184    0.06278 20.00000  -1.622     0.12    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.638
eta_squared(Bio.C.lme_TP2_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.12 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.C.lme_TP2_SS<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="SS"),])
boundary (singular) fit: see help('isSingular')
summary(Bio.C.lme_TP2_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "SS"), ]

REML criterion at convergence: -5.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.0676 -0.4964  0.1545  0.7280  1.2050 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.00000  0.0000  
 Residual             0.03634  0.1906  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.05201    0.05503 22.00000   19.12 3.42e-15 ***
OriginTransplant  0.15878    0.07783 22.00000    2.04   0.0535 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.707
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
eta_squared(Bio.C.lme_TP2_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.16 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.C_TP2.site.res<-data.frame(rbind(summary(Bio.C.lme_TP2_KL)$coefficients[-1,],
                                     summary(Bio.C.lme_TP2_SS)$coefficients[-1,]))
Bio.C_TP2.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.C_TP2.site.res$EtaSq<-c(eta_squared(Bio.C.lme_TP2_KL)$Eta2, eta_squared(Bio.C.lme_TP2_SS)$Eta2)
Bio.C_TP2.site.res$Response<-rep("Biomass Host", nrow(Bio.C_TP2.site.res))

##Combine results 
Bio.C_TP2.res<-rbind(Bio.C_TP2.res, Bio.C_TP2.site.res)
##Summary statistics by Site and Origin
TP2_BioHost.sum<-summarySE(Coral.TP2, measurevar="AFDW_mg.cm2_C", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Host Biomass across Treatments
TP2_BioHost.plot<-ggplot(TP2_BioHost.sum, aes(x=Site, y=AFDW_mg.cm2_C, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_C-se, ymax=AFDW_mg.cm2_C+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"), axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"))+
  labs(x="Site and Origin", y=expression(paste('Host Biomass (mg cm'^-2*")")), colour="Origin")+
  ylim(0, 2)+
  annotate("text", x=2, y=1.35, label="-", size=levels.sz, fontface="bold"); TP2_BioHost.plot

##Summary statistics by Site and Origin
TP2_BioHost.sum<-summarySE(Coral.TP2, measurevar="AFDW_mg.cm2_C", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Host Biomass across Treatments
TP2_BioHost.plot<-ggplot(TP2_BioHost.sum, aes(x=Site, y=AFDW_mg.cm2_C, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_C-se, ymax=AFDW_mg.cm2_C+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Host Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.8, 1.6)+
  annotate("text", x=2, y=1.35, label="-", size=levels.sz, fontface="bold"); TP2_BioHost.plot

Biomass Symbionts

##Check normality
hist(Coral.TP2$AFDW_mg.cm2_S)

shapiro.test(Coral.TP2$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP2$AFDW_mg.cm2_S
W = 0.98263, p-value = 0.6911
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP2<-lmer(AFDW_mg.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Bio.S.lme_res_TP2 <- simulateResiduals(fittedModel = Bio.S.lme_TP2, plot = F)
plot(Bio.S.lme_res_TP2)

##Check normality
hist(Coral.TP2$AFDW_mg.cm2_S)

shapiro.test(Coral.TP2$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP2$AFDW_mg.cm2_S
W = 0.98263, p-value = 0.6911
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP2<-lmer(AFDW_mg.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Bio.S.lme_res_TP2 <- simulateResiduals(fittedModel = Bio.S.lme_TP2, plot = F)
plot(Bio.S.lme_res_TP2)

##Check normality
hist(Coral.TP2$AFDW_mg.cm2_S)

shapiro.test(Coral.TP2$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP2$AFDW_mg.cm2_S
W = 0.98263, p-value = 0.6911
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP2<-lmer(AFDW_mg.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Bio.S.lme_res_TP2 <- simulateResiduals(fittedModel = Bio.S.lme_TP2, plot = F)
plot(Bio.S.lme_res_TP2)


##Model results
summary(Bio.S.lme_TP2)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP2

REML criterion at convergence: -50.2

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.89274 -0.61267 -0.05248  0.62439  1.64962 

Random effects:
 Groups   Name        Variance  Std.Dev.
 Genotype (Intercept) 0.0003874 0.01968 
 Residual             0.0146825 0.12117 
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              0.71562    0.03678 15.95638  19.457 1.54e-12 ***
OriginTransplant        -0.12045    0.04947 42.00000  -2.435   0.0192 *  
SiteSS                   0.12854    0.04947 42.00000   2.599   0.0129 *  
OriginTransplant:SiteSS  0.11020    0.06996 42.00000   1.575   0.1227    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.673              
SiteSS      -0.673  0.500       
OrgnTrn:SSS  0.476 -0.707 -0.707
eta_squared(Bio.S.lme_TP2)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.08 | [0.00, 1.00]
Site        |           0.40 | [0.21, 1.00]
Origin:Site |           0.06 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.S_TP2.res<-data.frame(summary(Bio.S.lme_TP2)$coefficients[-1,])
Bio.S_TP2.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.S_TP2.res$EtaSq<-c(eta_squared(Bio.S.lme_TP2)$Eta2)
Bio.S_TP2.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP2.res))

Effect size of Origin for each Site

##KL
Bio.S.lme_TP2_KL<-lmer(AFDW_mg.cm2_S~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="KL"),])
boundary (singular) fit: see help('isSingular')
summary(Bio.S.lme_TP2_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "KL"), ]

REML criterion at convergence: -25.2

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7872 -0.5807 -0.0580  0.6095  1.5698 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.00000  0.0000  
 Residual             0.01486  0.1219  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.71562    0.03519 22.00000   20.34 9.41e-16 ***
OriginTransplant -0.12045    0.04977 22.00000   -2.42   0.0242 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.707
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
eta_squared(Bio.S.lme_TP2_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.21 | [0.02, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.S.lme_TP2_SS<-lmer(AFDW_mg.cm2_S~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="SS"),])
summary(Bio.S.lme_TP2_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "SS"), ]

REML criterion at convergence: -27.9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7098 -0.5388 -0.1840  0.6014  1.8524 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.004978 0.07056 
 Residual             0.011447 0.10699 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.84416    0.05112  2.97784  16.513 0.000504 ***
OriginTransplant -0.01025    0.04368 20.00000  -0.235 0.816917    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.427
eta_squared(Bio.S.lme_TP2_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       2.74e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.S_TP2.site.res<-data.frame(rbind(summary(Bio.S.lme_TP2_KL)$coefficients[-1,],
                                     summary(Bio.S.lme_TP2_SS)$coefficients[-1,]))
Bio.S_TP2.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.S_TP2.site.res$EtaSq<-c(eta_squared(Bio.S.lme_TP2_KL)$Eta2, eta_squared(Bio.S.lme_TP2_SS)$Eta2)
Bio.S_TP2.site.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP2.site.res))

##Combine results 
Bio.S_TP2.res<-rbind(Bio.S_TP2.res, Bio.S_TP2.site.res)
##Summary statistics by Site and Origin
TP2_BioSym.sum<-summarySE(Coral.TP2, measurevar="AFDW_mg.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Biomass across Treatments
TP2_BioSym.plot<-ggplot(TP2_BioSym.sum, aes(x=Site, y=AFDW_mg.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_S-se, ymax=AFDW_mg.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"), axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"))+
  labs(x="Site and Origin", y=expression(paste('Symbiont Biomass (mg cm'^-2*")")), colour="Origin")+
  ylim(0, 1)+
  annotate("text", x=1, y=0.85, label="*", size=sig.sz, fontface="bold"); TP2_BioSym.plot

##Summary statistics by Site and Origin
TP2_BioSym.sum<-summarySE(Coral.TP2, measurevar="AFDW_mg.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Biomass across Treatments
TP2_BioSym.plot<-ggplot(TP2_BioSym.sum, aes(x=Site, y=AFDW_mg.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_S-se, ymax=AFDW_mg.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position= "top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.45, 0.95)+
  annotate("text", x=1, y=0.78, label="*", size=sig.sz, fontface="bold"); TP2_BioSym.plot

Chlorophyll

##Check normality
hist(Coral.TP2$Chl_ug.cm2)

shapiro.test(Coral.TP2$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP2$Chl_ug.cm2
W = 0.89322, p-value = 0.0003826
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP2<-lmer(Chl_ug.cm2~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Chl.lme_res_TP2 <- simulateResiduals(fittedModel = Chl.lme_TP2, plot = F)
plot(Chl.lme_res_TP2)

##Check normality
hist(Coral.TP2$Chl_ug.cm2)

shapiro.test(Coral.TP2$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP2$Chl_ug.cm2
W = 0.89322, p-value = 0.0003826
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP2<-lmer(Chl_ug.cm2~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Chl.lme_res_TP2 <- simulateResiduals(fittedModel = Chl.lme_TP2, plot = F)
plot(Chl.lme_res_TP2)

##Check normality
hist(Coral.TP2$Chl_ug.cm2)

shapiro.test(Coral.TP2$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP2$Chl_ug.cm2
W = 0.89322, p-value = 0.0003826
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP2<-lmer(Chl_ug.cm2~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Chl.lme_res_TP2 <- simulateResiduals(fittedModel = Chl.lme_TP2, plot = F)
plot(Chl.lme_res_TP2)


##Model results
summary(Chl.lme_TP2)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Chl_ug.cm2 ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP2

REML criterion at convergence: 60.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.5646 -0.6834 -0.2260  0.6331  2.9227 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.02999  0.1732  
 Residual             0.17246  0.4153  
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)               1.2824     0.1561  6.2441   8.216 0.000142 ***
OriginTransplant         -0.2475     0.1695 42.0000  -1.460 0.151795    
SiteSS                    0.5567     0.1695 42.0000   3.284 0.002071 ** 
OriginTransplant:SiteSS   0.6593     0.2398 42.0000   2.750 0.008761 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.543              
SiteSS      -0.543  0.500       
OrgnTrn:SSS  0.384 -0.707 -0.707
eta_squared(Chl.lme_TP2)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.01 | [0.00, 1.00]
Site        |           0.57 | [0.40, 1.00]
Origin:Site |           0.15 | [0.02, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Chl_TP2.res<-data.frame(summary(Chl.lme_TP2)$coefficients[-1,])
Chl_TP2.res$Predictor<-c("Origin", "Site", "Origin x Site")
Chl_TP2.res$EtaSq<-c(eta_squared(Chl.lme_TP2)$Eta2)
Chl_TP2.res$Response<-rep("Chlorophyll", nrow(Chl_TP2.res))

Effect size of Origin for each Site

##KL
Chl.lme_TP2_KL<-lmer(Chl_ug.cm2~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="KL"),])
summary(Chl.lme_TP2_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Chl_ug.cm2 ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "KL"), ]

REML criterion at convergence: 4.9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.4118 -0.7633 -0.1784  0.6717  2.0082 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.01088  0.1043  
 Residual             0.05353  0.2314  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.28244    0.08993  3.75836   14.26 0.000207 ***
OriginTransplant -0.24748    0.09445 20.00000   -2.62 0.016394 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.525
eta_squared(Chl.lme_TP2_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.26 | [0.03, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Chl.lme_TP2_SS<-lmer(Chl_ug.cm2~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="SS"),])
summary(Chl.lme_TP2_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Chl_ug.cm2 ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "SS"), ]

REML criterion at convergence: 36.7

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.2515 -0.7498 -0.1994  0.6152  2.0640 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.1653   0.4065  
 Residual             0.2069   0.4548  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)  
(Intercept)        1.8391     0.2689  2.5731   6.838   0.0103 *
OriginTransplant   0.4118     0.1857 20.0000   2.218   0.0383 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.345
eta_squared(Chl.lme_TP2_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.20 | [0.01, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Chl_TP2.site.res<-data.frame(rbind(summary(Chl.lme_TP2_KL)$coefficients[-1,],
                                     summary(Chl.lme_TP2_SS)$coefficients[-1,]))
Chl_TP2.site.res$Predictor<-c("KL Origin", "SS Origin")
Chl_TP2.site.res$EtaSq<-c(eta_squared(Chl.lme_TP2_KL)$Eta2, eta_squared(Chl.lme_TP2_SS)$Eta2)
Chl_TP2.site.res$Response<-rep("Chlorophyll", nrow(Chl_TP2.site.res))

##Combine results 
Chl_TP2.res<-rbind(Chl_TP2.res, Chl_TP2.site.res)
##Summary statistics by Site and Origin
TP2_Chl.sum<-summarySE(Coral.TP2, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP2_Chl.plot<-ggplot(TP2_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"), axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"))+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(0, 2.5)+
  annotate("text", x=c(1,2), y=c(1.5, 2.5), label="*", size=sig.sz, fontface="bold"); TP2_Chl.plot

##Summary statistics by Site and Origin
TP2_Chl.sum<-summarySE(Coral.TP2, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP2_Chl.plot<-ggplot(TP2_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position= "top")+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(0.5, 3.25)+
  annotate("text", x=c(1,2), y=c(1.5, 2.6), label="*", size=sig.sz, fontface="bold"); TP2_Chl.plot

Save Results

##Combine Results
Phys_T2.res<-rbind(Prot.C_TP2.res, Prot.S_TP2.res, Bio.C_TP2.res, Bio.S_TP2.res, Chl_TP2.res)

##Add Timepoint
Phys_T2.res$TimeP<-rep("T2", nrow(Phys_T2.res))

TP3

##Subset Timepoint 3 
Coral.TP3<-subset(Coral.rm, TimeP=="TP3")

Protein Host

##Check normality
hist(Coral.TP3$TP_ug.cm2_C)

shapiro.test(Coral.TP3$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP3$TP_ug.cm2_C
W = 0.97395, p-value = 0.3582
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP3<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Prot.C.lme_res_TP3 <- simulateResiduals(fittedModel = Prot.C.lme_TP3, plot = F)
plot(Prot.C.lme_res_TP3)

##Check normality
hist(Coral.TP3$TP_ug.cm2_C)

shapiro.test(Coral.TP3$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP3$TP_ug.cm2_C
W = 0.97395, p-value = 0.3582
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP3<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Prot.C.lme_res_TP3 <- simulateResiduals(fittedModel = Prot.C.lme_TP3, plot = F)
plot(Prot.C.lme_res_TP3)

##Check normality
hist(Coral.TP3$TP_ug.cm2_C)

shapiro.test(Coral.TP3$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP3$TP_ug.cm2_C
W = 0.97395, p-value = 0.3582
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP3<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Prot.C.lme_res_TP3 <- simulateResiduals(fittedModel = Prot.C.lme_TP3, plot = F)
plot(Prot.C.lme_res_TP3)

##Check normality
hist(Coral.TP3$TP_ug.cm2_C)

shapiro.test(Coral.TP3$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP3$TP_ug.cm2_C
W = 0.97395, p-value = 0.3582
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP3<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Prot.C.lme_res_TP3 <- simulateResiduals(fittedModel = Prot.C.lme_TP3, plot = F)
plot(Prot.C.lme_res_TP3)


##Model results
summary(Prot.C.lme_TP3)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP3

REML criterion at convergence: 507.3

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.52281 -0.56107 -0.09932  0.69343  2.85970 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 1765     42.01   
 Residual             4332     65.82   
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)              354.577     30.812   3.885  11.508 0.000382 ***
OriginTransplant         -28.338     26.869  42.000  -1.055 0.297608    
SiteSS                    11.510     26.869  42.000   0.428 0.670560    
OriginTransplant:SiteSS    6.695     37.999  42.000   0.176 0.861001    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.436              
SiteSS      -0.436  0.500       
OrgnTrn:SSS  0.308 -0.707 -0.707
eta_squared(Prot.C.lme_TP3)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.04 | [0.00, 1.00]
Site        |           0.01 | [0.00, 1.00]
Origin:Site |       7.38e-04 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.C_TP3.res<-data.frame(summary(Prot.C.lme_TP3)$coefficients[-1,])
Prot.C_TP3.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.C_TP3.res$EtaSq<-c(eta_squared(Prot.C.lme_TP3)$Eta2)
Prot.C_TP3.res$Response<-rep("Protein Host", nrow(Prot.C_TP3.res))

Protein Symbiont

##Check normality
hist(Coral.TP3$TP_ug.cm2_S)

shapiro.test(Coral.TP3$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP3$TP_ug.cm2_S
W = 0.95992, p-value = 0.1002
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP3<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Prot.S.lme_res_TP3 <- simulateResiduals(fittedModel = Prot.S.lme_TP3, plot = F)
plot(Prot.S.lme_res_TP3)

##Check normality
hist(Coral.TP3$TP_ug.cm2_S)

shapiro.test(Coral.TP3$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP3$TP_ug.cm2_S
W = 0.95992, p-value = 0.1002
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP3<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Prot.S.lme_res_TP3 <- simulateResiduals(fittedModel = Prot.S.lme_TP3, plot = F)
plot(Prot.S.lme_res_TP3)

##Check normality
hist(Coral.TP3$TP_ug.cm2_S)

shapiro.test(Coral.TP3$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP3$TP_ug.cm2_S
W = 0.95992, p-value = 0.1002
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP3<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Prot.S.lme_res_TP3 <- simulateResiduals(fittedModel = Prot.S.lme_TP3, plot = F)
plot(Prot.S.lme_res_TP3)

##Check normality
hist(Coral.TP3$TP_ug.cm2_S)

shapiro.test(Coral.TP3$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP3$TP_ug.cm2_S
W = 0.95992, p-value = 0.1002
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP3<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Prot.S.lme_res_TP3 <- simulateResiduals(fittedModel = Prot.S.lme_TP3, plot = F)
plot(Prot.S.lme_res_TP3)


##Model results
summary(Prot.S.lme_TP3)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP3

REML criterion at convergence: 497.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.04853 -0.63564 -0.04301  0.40723  2.41329 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  606.5   24.63   
 Residual             3588.9   59.91   
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)              350.037     22.388   6.353  15.635 2.61e-06 ***
OriginTransplant         -31.070     24.457  42.000  -1.270    0.211    
SiteSS                    54.236     24.457  42.000   2.218    0.032 *  
OriginTransplant:SiteSS   40.425     34.588  42.000   1.169    0.249    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.546              
SiteSS      -0.546  0.500       
OrgnTrn:SSS  0.386 -0.707 -0.707
eta_squared(Prot.S.lme_TP3)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       9.30e-03 | [0.00, 1.00]
Site        |           0.31 | [0.13, 1.00]
Origin:Site |           0.03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.S_TP3.res<-data.frame(summary(Prot.S.lme_TP3)$coefficients[-1,])
Prot.S_TP3.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.S_TP3.res$EtaSq<-c(eta_squared(Prot.S.lme_TP3)$Eta2)
Prot.S_TP3.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP3.res))

Effect size of Origin for each Site

##KL
Prot.S.lme_TP3_KL<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="KL"),])
summary(Prot.S.lme_TP3_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "KL"), ]

REML criterion at convergence: 240.3

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.73973 -0.61677 -0.06905  0.34373  2.28780 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  267.5   16.36   
 Residual             2444.8   49.45   
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       350.037     17.114   4.572  20.453 1.14e-05 ***
OriginTransplant  -31.070     20.186  20.000  -1.539    0.139    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.590
eta_squared(Prot.S.lme_TP3_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.11 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Prot.S.lme_TP3_SS<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="SS"),])
summary(Prot.S.lme_TP3_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "SS"), ]

REML criterion at convergence: 255.5

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.80428 -0.53697  0.01298  0.48663  2.22260 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  939.7   30.66   
 Residual             4737.1   68.83   
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       404.272     26.608   3.788  15.193 0.000156 ***
OriginTransplant    9.355     28.098  20.000   0.333 0.742643    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.528
eta_squared(Prot.S.lme_TP3_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       5.51e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Prot.S_TP3.site.res<-data.frame(rbind(summary(Prot.S.lme_TP3_KL)$coefficients[-1,],
                                     summary(Prot.S.lme_TP3_SS)$coefficients[-1,]))
Prot.S_TP3.site.res$Predictor<-c("KL Origin", "SS Origin")
Prot.S_TP3.site.res$EtaSq<-c(eta_squared(Prot.S.lme_TP3_KL)$Eta2, eta_squared(Prot.S.lme_TP3_SS)$Eta2)
Prot.S_TP3.site.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP3.site.res))

##Combine results 
Prot.S_TP3.res<-rbind(Prot.S_TP3.res, Prot.S_TP3.site.res)
##Summary statistics by Site and Origin
TP3_ProtSym.sum<-summarySE(Coral.TP3, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP3_ProtSym.plot<-ggplot(TP3_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(250, 450); TP3_ProtSym.plot

##Summary statistics by Site and Origin
TP3_ProtSym.sum<-summarySE(Coral.TP3, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP3_ProtSym.plot<-ggplot(TP3_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(250, 450); TP3_ProtSym.plot

##Summary statistics by Site and Origin
TP3_ProtSym.sum<-summarySE(Coral.TP3, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP3_ProtSym.plot<-ggplot(TP3_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(250, 550); TP3_ProtSym.plot

Biomass Host

##Check normality
hist(Coral.TP3$AFDW_mg.cm2_C)

shapiro.test(Coral.TP3$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP3$AFDW_mg.cm2_C
W = 0.98042, p-value = 0.5962
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP3<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Bio.C.lme_res_TP3 <- simulateResiduals(fittedModel = Bio.C.lme_TP3, plot = F)
plot(Bio.C.lme_res_TP3)

##Check normality
hist(Coral.TP3$AFDW_mg.cm2_C)

shapiro.test(Coral.TP3$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP3$AFDW_mg.cm2_C
W = 0.98042, p-value = 0.5962
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP3<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Bio.C.lme_res_TP3 <- simulateResiduals(fittedModel = Bio.C.lme_TP3, plot = F)
plot(Bio.C.lme_res_TP3)

##Check normality
hist(Coral.TP3$AFDW_mg.cm2_C)

shapiro.test(Coral.TP3$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP3$AFDW_mg.cm2_C
W = 0.98042, p-value = 0.5962
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP3<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Bio.C.lme_res_TP3 <- simulateResiduals(fittedModel = Bio.C.lme_TP3, plot = F)
plot(Bio.C.lme_res_TP3)


##Model results
summary(Bio.C.lme_TP3)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP3

REML criterion at convergence: 1.8

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.39331 -0.54299  0.06699  0.61611  2.15929 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.007168 0.08467 
 Residual             0.045972 0.21441 
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              1.18826    0.07887  6.67318  15.066 2.12e-06 ***
OriginTransplant        -0.12291    0.08753 42.00000  -1.404    0.168    
SiteSS                   0.09539    0.08753 42.00000   1.090    0.282    
OriginTransplant:SiteSS  0.12089    0.12379 42.00000   0.977    0.334    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.555              
SiteSS      -0.555  0.500       
OrgnTrn:SSS  0.392 -0.707 -0.707
eta_squared(Bio.C.lme_TP3)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.02 | [0.00, 1.00]
Site        |           0.13 | [0.01, 1.00]
Origin:Site |           0.02 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.C_TP3.res<-data.frame(summary(Bio.C.lme_TP3)$coefficients[-1,])
Bio.C_TP3.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.C_TP3.res$EtaSq<-c(eta_squared(Bio.C.lme_TP3)$Eta2)
Bio.C_TP3.res$Response<-rep("Biomass Host", nrow(Bio.C_TP3.res))

Effect size of Origin for each Site

##KL
Bio.C.lme_TP3_KL<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="KL"),])
summary(Bio.C.lme_TP3_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "KL"), ]

REML criterion at convergence: 4.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.11835 -0.65919 -0.03638  0.66514  2.01105 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.002671 0.05168 
 Residual             0.055878 0.23638 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.18826    0.07448  5.64458  15.955 6.53e-06 ***
OriginTransplant -0.12291    0.09650 20.00000  -1.274    0.217    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.648
eta_squared(Bio.C.lme_TP3_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.08 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.C.lme_TP3_SS<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="SS"),])
summary(Bio.C.lme_TP3_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "SS"), ]

REML criterion at convergence: -1.9

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.92899 -0.46522  0.05763  0.57468  2.06374 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.006692 0.0818  
 Residual             0.039684 0.1992  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                  Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)       1.283651   0.074415  3.992959  17.250 6.71e-05 ***
OriginTransplant -0.002024   0.081326 20.000004  -0.025     0.98    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.546
eta_squared(Bio.C.lme_TP3_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       3.10e-05 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.C_TP3.site.res<-data.frame(rbind(summary(Bio.C.lme_TP3_KL)$coefficients[-1,],
                                     summary(Bio.C.lme_TP3_SS)$coefficients[-1,]))
Bio.C_TP3.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.C_TP3.site.res$EtaSq<-c(eta_squared(Bio.C.lme_TP3_KL)$Eta2, eta_squared(Bio.C.lme_TP3_SS)$Eta2)
Bio.C_TP3.site.res$Response<-rep("Biomass Host", nrow(Bio.C_TP3.site.res))

##Combine results 
Bio.C_TP3.res<-rbind(Bio.C_TP3.res, Bio.C_TP3.site.res)
##Summary statistics by Site and Origin
TP3_BioHost.sum<-summarySE(Coral.TP3, measurevar="AFDW_mg.cm2_C", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Host Biomass across Treatments
TP3_BioHost.plot<-ggplot(TP3_BioHost.sum, aes(x=Site, y=AFDW_mg.cm2_C, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_C-se, ymax=AFDW_mg.cm2_C+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"), axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"))+
  labs(x="Site and Origin", y=expression(paste('Host Biomass (mg cm'^-2*")")), colour="Origin")+
  ylim(0, 2); TP3_BioHost.plot

##Summary statistics by Site and Origin
TP3_BioHost.sum<-summarySE(Coral.TP3, measurevar="AFDW_mg.cm2_C", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Host Biomass across Treatments
TP3_BioHost.plot<-ggplot(TP3_BioHost.sum, aes(x=Site, y=AFDW_mg.cm2_C, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_C-se, ymax=AFDW_mg.cm2_C+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Host Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.8, 1.6); TP3_BioHost.plot

Biomass Symbionts

##Check normality
hist(Coral.TP3$AFDW_mg.cm2_S)

shapiro.test(Coral.TP3$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP3$AFDW_mg.cm2_S
W = 0.95017, p-value = 0.04062
#Slightly non Normal

hist(log(Coral.TP3$AFDW_mg.cm2_S+1))

shapiro.test(log(Coral.TP3$AFDW_mg.cm2_S+1))

    Shapiro-Wilk normality test

data:  log(Coral.TP3$AFDW_mg.cm2_S + 1)
W = 0.97082, p-value = 0.2726
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP3<-lmer(log(AFDW_mg.cm2_S+1)~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Bio.S.lme_res_TP3 <- simulateResiduals(fittedModel = Bio.S.lme_TP3, plot = F)
plot(Bio.S.lme_res_TP3)

##Check normality
hist(Coral.TP3$AFDW_mg.cm2_S)

shapiro.test(Coral.TP3$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP3$AFDW_mg.cm2_S
W = 0.95017, p-value = 0.04062
#Slightly non Normal

hist(log(Coral.TP3$AFDW_mg.cm2_S+1))

shapiro.test(log(Coral.TP3$AFDW_mg.cm2_S+1))

    Shapiro-Wilk normality test

data:  log(Coral.TP3$AFDW_mg.cm2_S + 1)
W = 0.97082, p-value = 0.2726
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP3<-lmer(log(AFDW_mg.cm2_S+1)~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Bio.S.lme_res_TP3 <- simulateResiduals(fittedModel = Bio.S.lme_TP3, plot = F)
plot(Bio.S.lme_res_TP3)


##Model results
summary(Bio.S.lme_TP3)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(AFDW_mg.cm2_S + 1) ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP3

REML criterion at convergence: -59.8

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.9013 -0.6371 -0.1087  0.6759  2.0985 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.001717 0.04143 
 Residual             0.011351 0.10654 
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              0.50341    0.03896  6.79866  12.920 4.92e-06 ***
OriginTransplant        -0.02185    0.04349 42.00000  -0.502   0.6180    
SiteSS                   0.07684    0.04349 42.00000   1.767   0.0845 .  
OriginTransplant:SiteSS  0.04053    0.06151 42.00000   0.659   0.5136    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.558              
SiteSS      -0.558  0.500       
OrgnTrn:SSS  0.395 -0.707 -0.707
eta_squared(Bio.S.lme_TP3)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       6.34e-05 | [0.00, 1.00]
Site        |           0.19 | [0.04, 1.00]
Origin:Site |           0.01 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.S_TP3.res<-data.frame(summary(Bio.S.lme_TP3)$coefficients[-1,])
Bio.S_TP3.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.S_TP3.res$EtaSq<-c(eta_squared(Bio.S.lme_TP3)$Eta2)
Bio.S_TP3.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP3.res))

Effect size of Origin for each Site

##KL
Bio.S.lme_TP3_KL<-lmer(log(AFDW_mg.cm2_S+1)~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="KL"),])
summary(Bio.S.lme_TP3_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(AFDW_mg.cm2_S + 1) ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "KL"), ]

REML criterion at convergence: -32.8

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.19334 -0.63480 -0.09404  0.31252  2.01340 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.001809 0.04253 
 Residual             0.009689 0.09843 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.50341    0.03755  3.86356  13.405 0.000221 ***
OriginTransplant -0.02185    0.04018 20.00000  -0.544 0.592623    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.535
eta_squared(Bio.S.lme_TP3_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.01 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.S.lme_TP3_SS<-lmer(log(AFDW_mg.cm2_S+1)~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="SS"),])
summary(Bio.S.lme_TP3_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(AFDW_mg.cm2_S + 1) ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "SS"), ]

REML criterion at convergence: -26.4

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.70864 -0.59241 -0.00109  0.59598  2.08623 

Random effects:
 Groups   Name        Variance  Std.Dev.
 Genotype (Intercept) 0.0008163 0.02857 
 Residual             0.0136003 0.11662 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.58025    0.03749  5.37009  15.478 1.16e-05 ***
OriginTransplant  0.01868    0.04761 20.00000   0.392    0.699    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.635
eta_squared(Bio.S.lme_TP3_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       7.63e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.S_TP3.site.res<-data.frame(rbind(summary(Bio.S.lme_TP3_KL)$coefficients[-1,],
                                     summary(Bio.S.lme_TP3_SS)$coefficients[-1,]))
Bio.S_TP3.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.S_TP3.site.res$EtaSq<-c(eta_squared(Bio.S.lme_TP3_KL)$Eta2, eta_squared(Bio.S.lme_TP3_SS)$Eta2)
Bio.S_TP3.site.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP3.site.res))

##Combine results 
Bio.S_TP3.res<-rbind(Bio.S_TP3.res, Bio.S_TP3.site.res)
##Summary statistics by Site and Origin
TP3_BioSym.sum<-summarySE(Coral.TP3, measurevar="AFDW_mg.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Biomass across Treatments
TP3_BioSym.plot<-ggplot(TP3_BioSym.sum, aes(x=Site, y=AFDW_mg.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_S-se, ymax=AFDW_mg.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Biomass (mg cm'^-2*")")), colour="Origin")+
  ylim(0, 1); TP3_BioSym.plot

##Summary statistics by Site and Origin
TP3_BioSym.sum<-summarySE(Coral.TP3, measurevar="AFDW_mg.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Biomass across Treatments
TP3_BioSym.plot<-ggplot(TP3_BioSym.sum, aes(x=Site, y=AFDW_mg.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_S-se, ymax=AFDW_mg.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.45, 0.95); TP3_BioSym.plot

Chlorophyll

##Check normality
hist(Coral.TP3$Chl_ug.cm2)

shapiro.test(Coral.TP3$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP3$Chl_ug.cm2
W = 0.92502, p-value = 0.004491
#Not normal

hist(log(Coral.TP3$Chl_ug.cm2+1))

shapiro.test(log(Coral.TP3$Chl_ug.cm2+1))

    Shapiro-Wilk normality test

data:  log(Coral.TP3$Chl_ug.cm2 + 1)
W = 0.97477, p-value = 0.3837
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP3<-lmer(log(Chl_ug.cm2+1)~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Chl.lme_res_TP3 <- simulateResiduals(fittedModel = Chl.lme_TP3, plot = F)
plot(Chl.lme_res_TP3)

##Check normality
hist(Coral.TP3$Chl_ug.cm2)

shapiro.test(Coral.TP3$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP3$Chl_ug.cm2
W = 0.92502, p-value = 0.004491
#Not normal

hist(log(Coral.TP3$Chl_ug.cm2+1))

shapiro.test(log(Coral.TP3$Chl_ug.cm2+1))

    Shapiro-Wilk normality test

data:  log(Coral.TP3$Chl_ug.cm2 + 1)
W = 0.97477, p-value = 0.3837
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP3<-lmer(log(Chl_ug.cm2+1)~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Chl.lme_res_TP3 <- simulateResiduals(fittedModel = Chl.lme_TP3, plot = F)
plot(Chl.lme_res_TP3)


##Model results
summary(Chl.lme_TP3)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(Chl_ug.cm2 + 1) ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP3

REML criterion at convergence: -35.4

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.25062 -0.55117 -0.02076  0.43420  2.75244 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.01951  0.1397  
 Residual             0.01831  0.1353  
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)   
(Intercept)              0.81996    0.08960  2.71679   9.151  0.00406 **
OriginTransplant        -0.10476    0.05525 42.00000  -1.896  0.06483 . 
SiteSS                   0.18045    0.05525 42.00000   3.266  0.00217 **
OriginTransplant:SiteSS  0.13664    0.07813 42.00000   1.749  0.08761 . 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.308              
SiteSS      -0.308  0.500       
OrgnTrn:SSS  0.218 -0.707 -0.707
eta_squared(Chl.lme_TP3)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.02 | [0.00, 1.00]
Site        |           0.49 | [0.31, 1.00]
Origin:Site |           0.07 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Chl_TP3.res<-data.frame(summary(Chl.lme_TP3)$coefficients[-1,])
Chl_TP3.res$Predictor<-c("Origin", "Site", "Origin x Site")
Chl_TP3.res$EtaSq<-c(eta_squared(Chl.lme_TP3)$Eta2)
Chl_TP3.res$Response<-rep("Chlorophyll", nrow(Chl_TP3.res))

Effect size of Origin for each Site

##KL
Chl.lme_TP3_KL<-lmer(log(Chl_ug.cm2+1)~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="KL"),])
summary(Chl.lme_TP3_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(Chl_ug.cm2 + 1) ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "KL"), ]

REML criterion at convergence: -19

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7968 -0.6704 -0.2815  0.8139  2.1670 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.009698 0.09848 
 Residual             0.016854 0.12982 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)   
(Intercept)        0.8200     0.0681  2.7687  12.041  0.00179 **
OriginTransplant  -0.1048     0.0530 20.0000  -1.977  0.06205 . 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.389
eta_squared(Chl.lme_TP3_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.16 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Chl.lme_TP3_SS<-lmer(log(Chl_ug.cm2+1)~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="SS"),])
summary(Chl.lme_TP3_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(Chl_ug.cm2 + 1) ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "SS"), ]

REML criterion at convergence: -16.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.11066 -0.45318 -0.01187  0.63929  2.41481 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.03310  0.1819  
 Residual             0.01702  0.1305  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)   
(Intercept)       1.00040    0.11159  2.24803   8.965  0.00837 **
OriginTransplant  0.03189    0.05326 20.00000   0.599  0.55610   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.239
eta_squared(Chl.lme_TP3_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.02 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Chl_TP3.site.res<-data.frame(rbind(summary(Chl.lme_TP3_KL)$coefficients[-1,],
                                     summary(Chl.lme_TP3_SS)$coefficients[-1,]))
Chl_TP3.site.res$Predictor<-c("KL Origin", "SS Origin")
Chl_TP3.site.res$EtaSq<-c(eta_squared(Chl.lme_TP3_KL)$Eta2, eta_squared(Chl.lme_TP3_SS)$Eta2)
Chl_TP3.site.res$Response<-rep("Chlorophyll", nrow(Chl_TP3.site.res))

##Combine results 
Chl_TP3.res<-rbind(Chl_TP3.res, Chl_TP3.site.res)
##Summary statistics by Site and Origin
TP3_Chl.sum<-summarySE(Coral.TP3, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP3_Chl.plot<-ggplot(TP3_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"), axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"))+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(0, 2.5)+
  annotate("text", x=1, y=1.7, label="-", size=levels.sz, fontface="bold"); TP3_Chl.plot

##Summary statistics by Site and Origin
TP3_Chl.sum<-summarySE(Coral.TP3, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP3_Chl.plot<-ggplot(TP3_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(0.5, 3.25)+
  annotate("text", x=1, y=1.5, label="-", size=levels.sz, fontface="bold"); TP3_Chl.plot

Save Results

##Combine Results
Phys_T3.res<-rbind(Prot.C_TP3.res, Prot.S_TP3.res, Bio.C_TP3.res, Bio.S_TP3.res, Chl_TP3.res)

##Add Timepoint
Phys_T3.res$TimeP<-rep("T3", nrow(Phys_T3.res))

TP4

##Subset Timepoint 4 
Coral.TP4<-subset(Coral.rm, TimeP=="TP4")

Protein Host

##Check normality
hist(Coral.TP4$TP_ug.cm2_C)

shapiro.test(Coral.TP4$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP4$TP_ug.cm2_C
W = 0.97592, p-value = 0.4503
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP4<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP4)

##Check residuals
Prot.C.lme_res_TP4 <- simulateResiduals(fittedModel = Prot.C.lme_TP4, plot = F)
plot(Prot.C.lme_res_TP4)

##Check normality
hist(Coral.TP4$TP_ug.cm2_C)

shapiro.test(Coral.TP4$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP4$TP_ug.cm2_C
W = 0.97592, p-value = 0.4503
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP4<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP4)

##Check residuals
Prot.C.lme_res_TP4 <- simulateResiduals(fittedModel = Prot.C.lme_TP4, plot = F)
plot(Prot.C.lme_res_TP4)


##Model results
summary(Prot.C.lme_TP4)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP4

REML criterion at convergence: 492.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.82648 -0.74846  0.02454  0.66400  1.93010 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)   23.74   4.872  
 Residual             5739.32  75.758  
Number of obs: 46, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error     df t value Pr(>|t|)    
(Intercept)               329.20      22.05  20.43  14.930 1.86e-12 ***
OriginTransplant           21.29      31.63  40.27   0.673    0.505    
SiteSS                     50.44      30.93  40.12   1.631    0.111    
OriginTransplant:SiteSS   -67.31      44.72  40.12  -1.505    0.140    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.686              
SiteSS      -0.701  0.489       
OrgnTrn:SSS  0.485 -0.707 -0.692
eta_squared(Prot.C.lme_TP4)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       7.51e-03 | [0.00, 1.00]
Site        |           0.01 | [0.00, 1.00]
Origin:Site |           0.05 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.C_TP4.res<-data.frame(summary(Prot.C.lme_TP4)$coefficients[-1,])
Prot.C_TP4.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.C_TP4.res$EtaSq<-c(eta_squared(Prot.C.lme_TP4)$Eta2)
Prot.C_TP4.res$Response<-rep("Protein Host", nrow(Prot.C_TP4.res))

Protein Symbiont

##Check normality
hist(Coral.TP4$TP_ug.cm2_S)

shapiro.test(Coral.TP4$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP4$TP_ug.cm2_S
W = 0.98874, p-value = 0.9316
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP4<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP4)

##Check residuals
Prot.S.lme_res_TP4 <- simulateResiduals(fittedModel = Prot.S.lme_TP4, plot = F)
plot(Prot.S.lme_res_TP4)

##Check normality
hist(Coral.TP4$TP_ug.cm2_S)

shapiro.test(Coral.TP4$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP4$TP_ug.cm2_S
W = 0.98874, p-value = 0.9316
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP4<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP4)

##Check residuals
Prot.S.lme_res_TP4 <- simulateResiduals(fittedModel = Prot.S.lme_TP4, plot = F)
plot(Prot.S.lme_res_TP4)


##Model results
summary(Prot.S.lme_TP4)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP4

REML criterion at convergence: 464

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.9674 -0.6915 -0.1394  0.7468  1.8746 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  258.6   16.08   
 Residual             2793.9   52.86   
Number of obs: 46, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)              283.146     17.862   8.966  15.852 7.28e-08 ***
OriginTransplant           2.715     22.078  40.118   0.123    0.903    
SiteSS                    94.191     21.579  40.048   4.365 8.71e-05 ***
OriginTransplant:SiteSS  -14.298     31.203  40.048  -0.458    0.649    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.590              
SiteSS      -0.604  0.489       
OrgnTrn:SSS  0.418 -0.707 -0.692
eta_squared(Prot.S.lme_TP4)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       2.00e-03 | [0.00, 1.00]
Site        |           0.44 | [0.25, 1.00]
Origin:Site |       5.22e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.S_TP4.res<-data.frame(summary(Prot.S.lme_TP4)$coefficients[-1,])
Prot.S_TP4.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.S_TP4.res$EtaSq<-c(eta_squared(Prot.S.lme_TP4)$Eta2)
Prot.S_TP4.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP4.res))

Effect size of Origin for each Site

##KL
Prot.S.lme_TP4_KL<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="KL"),])
summary(Prot.S.lme_TP4_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "KL"), ]

REML criterion at convergence: 233.2

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.9026 -0.5130 -0.1508  0.5988  1.9630 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  123.5   11.11   
 Residual             3004.0   54.81   
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       283.146     17.074   5.322  16.584 8.71e-06 ***
OriginTransplant    2.801     22.890  19.068   0.122    0.904    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.641
eta_squared(Prot.S.lme_TP4_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       7.84e-04 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Prot.S.lme_TP4_SS<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="SS"),])
summary(Prot.S.lme_TP4_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "SS"), ]

REML criterion at convergence: 231.3

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.95275 -0.71834 -0.03221  0.77696  1.62897 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  300.3   17.33   
 Residual             2653.9   51.52   
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       377.337     17.924   4.502   21.05 1.14e-05 ***
OriginTransplant  -10.979     21.525  19.180   -0.51    0.616    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.573
eta_squared(Prot.S.lme_TP4_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.01 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Prot.S_TP4.site.res<-data.frame(rbind(summary(Prot.S.lme_TP4_KL)$coefficients[-1,],
                                     summary(Prot.S.lme_TP4_SS)$coefficients[-1,]))
Prot.S_TP4.site.res$Predictor<-c("KL Origin", "SS Origin")
Prot.S_TP4.site.res$EtaSq<-c(eta_squared(Prot.S.lme_TP4_KL)$Eta2, eta_squared(Prot.S.lme_TP4_SS)$Eta2)
Prot.S_TP4.site.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP4.site.res))

##Combine results 
Prot.S_TP4.res<-rbind(Prot.S_TP4.res, Prot.S_TP4.site.res)
##Summary statistics by Site and Origin
TP4_ProtSym.sum<-summarySE(Coral.TP4, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP4_ProtSym.plot<-ggplot(TP4_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(250, 450); TP4_ProtSym.plot

##Summary statistics by Site and Origin
TP4_ProtSym.sum<-summarySE(Coral.TP4, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP4_ProtSym.plot<-ggplot(TP4_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(250, 550); TP4_ProtSym.plot

Biomass Host

##Check normality
hist(Coral.TP4$AFDW_mg.cm2_C)

shapiro.test(Coral.TP4$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP4$AFDW_mg.cm2_C
W = 0.98656, p-value = 0.8669
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP4<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP4)

##Check residuals
Bio.C.lme_res_TP4 <- simulateResiduals(fittedModel = Bio.C.lme_TP4, plot = F)
plot(Bio.C.lme_res_TP4)

##Check normality
hist(Coral.TP4$AFDW_mg.cm2_C)

shapiro.test(Coral.TP4$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP4$AFDW_mg.cm2_C
W = 0.98656, p-value = 0.8669
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP4<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP4)

##Check residuals
Bio.C.lme_res_TP4 <- simulateResiduals(fittedModel = Bio.C.lme_TP4, plot = F)
plot(Bio.C.lme_res_TP4)


##Model results
summary(Bio.C.lme_TP4)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP4

REML criterion at convergence: 31.4

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.94819 -0.65333  0.01107  0.59003  2.21357 

Random effects:
 Groups   Name        Variance  Std.Dev.
 Genotype (Intercept) 0.0006586 0.02566 
 Residual             0.0974518 0.31217 
Number of obs: 46, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              0.99501    0.09133 19.92205  10.895 7.67e-10 ***
OriginTransplant         0.17260    0.13032 40.29158   1.324   0.1928    
SiteSS                   0.33916    0.12744 40.15351   2.661   0.0111 *  
OriginTransplant:SiteSS -0.38438    0.18428 40.15351  -2.086   0.0434 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.682              
SiteSS      -0.698  0.489       
OrgnTrn:SSS  0.483 -0.707 -0.692
eta_squared(Bio.C.lme_TP4)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       1.12e-03 | [0.00, 1.00]
Site        |           0.06 | [0.00, 1.00]
Origin:Site |           0.10 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.C_TP4.res<-data.frame(summary(Bio.C.lme_TP4)$coefficients[-1,])
Bio.C_TP4.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.C_TP4.res$EtaSq<-c(eta_squared(Bio.C.lme_TP4)$Eta2)
Bio.C_TP4.res$Response<-rep("Biomass Host", nrow(Bio.C_TP4.res))

Effect size of Origin for each Site


##KL
Bio.C.lme_TP4_KL<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="KL"),])
boundary (singular) fit: see help('isSingular')
summary(Bio.C.lme_TP4_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "KL"), ]

REML criterion at convergence: 22.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.65092 -0.56347  0.01929  0.47522  1.89563 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.0000   0.0000  
 Residual             0.1361   0.3689  
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)        0.9950     0.1065 21.0000   9.344 6.27e-09 ***
OriginTransplant   0.1727     0.1540 21.0000   1.121    0.275    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.692
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
eta_squared(Bio.C.lme_TP4_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.06 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.C.lme_TP4_SS<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="SS"),])
summary(Bio.C.lme_TP4_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "SS"), ]

REML criterion at convergence: 4.4

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.2767 -0.7007  0.1653  0.5506  2.0180 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.009792 0.09895 
 Residual             0.052524 0.22918 
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.33417    0.08741  3.82984  15.263 0.000143 ***
OriginTransplant -0.20931    0.09578 19.12799  -2.185 0.041513 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.523
eta_squared(Bio.C.lme_TP4_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.20 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.C_TP4.site.res<-data.frame(rbind(summary(Bio.C.lme_TP4_KL)$coefficients[-1,],
                                     summary(Bio.C.lme_TP4_SS)$coefficients[-1,]))
Bio.C_TP4.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.C_TP4.site.res$EtaSq<-c(eta_squared(Bio.C.lme_TP4_KL)$Eta2, eta_squared(Bio.C.lme_TP4_SS)$Eta2)
Bio.C_TP4.site.res$Response<-rep("Biomass Host", nrow(Bio.C_TP4.site.res))

##Combine results 
Bio.C_TP4.res<-rbind(Bio.C_TP4.res, Bio.C_TP4.site.res)
##Summary statistics by Site and Origin
TP4_BioHost.sum<-summarySE(Coral.TP4, measurevar="AFDW_mg.cm2_C", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Host Biomass across Treatments
TP4_BioHost.plot<-ggplot(TP4_BioHost.sum, aes(x=Site, y=AFDW_mg.cm2_C, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_C-se, ymax=AFDW_mg.cm2_C+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"), axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"))+
  labs(x="Site and Origin", y=expression(paste('Host Biomass (mg cm'^-2*")")), colour="Origin")+
  ylim(0, 2)+
  annotate("text", x=2, y=1.6, label="*", size=sig.sz, fontface="bold"); TP4_BioHost.plot

##Summary statistics by Site and Origin
TP4_BioHost.sum<-summarySE(Coral.TP4, measurevar="AFDW_mg.cm2_C", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Host Biomass across Treatments
TP4_BioHost.plot<-ggplot(TP4_BioHost.sum, aes(x=Site, y=AFDW_mg.cm2_C, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_C-se, ymax=AFDW_mg.cm2_C+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Host Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.8, 1.6)+
  annotate("text", x=2, y=1.45, label="*", size=sig.sz, fontface="bold"); TP4_BioHost.plot

Biomass Symbionts

##Check normality
hist(Coral.TP4$AFDW_mg.cm2_S)

shapiro.test(Coral.TP4$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP4$AFDW_mg.cm2_S
W = 0.96144, p-value = 0.1304
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP4<-lmer(AFDW_mg.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP4)
boundary (singular) fit: see help('isSingular')
##Check residuals
Bio.S.lme_res_TP4 <- simulateResiduals(fittedModel = Bio.S.lme_TP4, plot = F)
plot(Bio.S.lme_res_TP4)

##Check normality
hist(Coral.TP4$AFDW_mg.cm2_S)

shapiro.test(Coral.TP4$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP4$AFDW_mg.cm2_S
W = 0.96144, p-value = 0.1304
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP4<-lmer(AFDW_mg.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP4)
boundary (singular) fit: see help('isSingular')
##Check residuals
Bio.S.lme_res_TP4 <- simulateResiduals(fittedModel = Bio.S.lme_TP4, plot = F)
plot(Bio.S.lme_res_TP4)


##Model results
summary(Bio.S.lme_TP4)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP4

REML criterion at convergence: -13.3

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.9850 -0.7648 -0.1116  0.6976  1.8287 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.00000  0.0000  
 Residual             0.03381  0.1839  
Number of obs: 46, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              0.58851    0.05308 42.00000  11.087 4.71e-14 ***
OriginTransplant         0.02029    0.07675 42.00000   0.264   0.7928    
SiteSS                   0.15893    0.07507 42.00000   2.117   0.0402 *  
OriginTransplant:SiteSS -0.05653    0.10855 42.00000  -0.521   0.6052    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.692              
SiteSS      -0.707  0.489       
OrgnTrn:SSS  0.489 -0.707 -0.692
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
eta_squared(Bio.S.lme_TP4)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       5.14e-04 | [0.00, 1.00]
Site        |           0.12 | [0.01, 1.00]
Origin:Site |       6.42e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.S_TP4.res<-data.frame(summary(Bio.S.lme_TP4)$coefficients[-1,])
Bio.S_TP4.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.S_TP4.res$EtaSq<-c(eta_squared(Bio.S.lme_TP4)$Eta2)
Bio.S_TP4.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP4.res))

Effect size of Origin for each Site

##KL
Bio.S.lme_TP4_KL<-lmer(AFDW_mg.cm2_S~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="KL"),])
boundary (singular) fit: see help('isSingular')
summary(Bio.S.lme_TP4_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "KL"), ]

REML criterion at convergence: -9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.8536 -0.7454 -0.2379  0.7005  1.9338 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.00000  0.0000  
 Residual             0.03023  0.1739  
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.58851    0.05019 21.00000   11.72 1.12e-10 ***
OriginTransplant  0.02029    0.07258 21.00000    0.28    0.783    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.692
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
eta_squared(Bio.S.lme_TP4_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       3.71e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.S.lme_TP4_SS<-lmer(AFDW_mg.cm2_S~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="SS"),])
boundary (singular) fit: see help('isSingular')
summary(Bio.S.lme_TP4_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "SS"), ]

REML criterion at convergence: -4.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.8877 -0.8214  0.1483  0.7055  1.5821 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.00000  0.0000  
 Residual             0.03739  0.1934  
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.74744    0.05582 21.00000  13.391  9.4e-12 ***
OriginTransplant -0.03625    0.08071 21.00000  -0.449    0.658    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.692
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
eta_squared(Bio.S.lme_TP4_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       9.51e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.S_TP4.site.res<-data.frame(rbind(summary(Bio.S.lme_TP4_KL)$coefficients[-1,],
                                     summary(Bio.S.lme_TP4_SS)$coefficients[-1,]))
Bio.S_TP4.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.S_TP4.site.res$EtaSq<-c(eta_squared(Bio.S.lme_TP4_KL)$Eta2, eta_squared(Bio.S.lme_TP4_SS)$Eta2)
Bio.S_TP4.site.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP4.site.res))

##Combine results 
Bio.S_TP4.res<-rbind(Bio.S_TP4.res, Bio.S_TP4.site.res)
##Summary statistics by Site and Origin
TP4_BioSym.sum<-summarySE(Coral.TP4, measurevar="AFDW_mg.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Biomass across Treatments
TP4_BioSym.plot<-ggplot(TP4_BioSym.sum, aes(x=Site, y=AFDW_mg.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_S-se, ymax=AFDW_mg.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Biomass (mg cm'^-2*")")), colour="Origin")+
  ylim(0, 1); TP4_BioSym.plot

##Summary statistics by Site and Origin
TP4_BioSym.sum<-summarySE(Coral.TP4, measurevar="AFDW_mg.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Biomass across Treatments
TP4_BioSym.plot<-ggplot(TP4_BioSym.sum, aes(x=Site, y=AFDW_mg.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_S-se, ymax=AFDW_mg.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.45, 0.95); TP4_BioSym.plot

##Summary statistics by Site and Origin
TP4_BioSym.sum<-summarySE(Coral.TP4, measurevar="AFDW_mg.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Biomass across Treatments
TP4_BioSym.plot<-ggplot(TP4_BioSym.sum, aes(x=Site, y=AFDW_mg.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_S-se, ymax=AFDW_mg.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.45, 0.95); TP4_BioSym.plot

Chlorophyll

##Check normality
hist(Coral.TP4$Chl_ug.cm2)

shapiro.test(Coral.TP4$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP4$Chl_ug.cm2
W = 0.94799, p-value = 0.03927
#Slightly non normal

hist(log(Coral.TP4$Chl_ug.cm2+1))

shapiro.test(log(Coral.TP4$Chl_ug.cm2+1))

    Shapiro-Wilk normality test

data:  log(Coral.TP4$Chl_ug.cm2 + 1)
W = 0.97457, p-value = 0.4047
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP4<-lmer(log(Chl_ug.cm2+1)~Origin*Site+(1|Genotype), data=Coral.TP4)

##Check residuals
Chl.lme_res_TP4 <- simulateResiduals(fittedModel = Chl.lme_TP4, plot = F)
plot(Chl.lme_res_TP4)

##Check normality
hist(Coral.TP4$Chl_ug.cm2)

shapiro.test(Coral.TP4$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP4$Chl_ug.cm2
W = 0.94799, p-value = 0.03927
#Slightly non normal

hist(log(Coral.TP4$Chl_ug.cm2+1))

shapiro.test(log(Coral.TP4$Chl_ug.cm2+1))

    Shapiro-Wilk normality test

data:  log(Coral.TP4$Chl_ug.cm2 + 1)
W = 0.97457, p-value = 0.4047
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP4<-lmer(log(Chl_ug.cm2+1)~Origin*Site+(1|Genotype), data=Coral.TP4)

##Check residuals
Chl.lme_res_TP4 <- simulateResiduals(fittedModel = Chl.lme_TP4, plot = F)
plot(Chl.lme_res_TP4)


##Model results
summary(Chl.lme_TP4)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(Chl_ug.cm2 + 1) ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP4

REML criterion at convergence: -35.8

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.5527 -0.6247  0.1083  0.5659  1.8596 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.02813  0.1677  
 Residual             0.01693  0.1301  
Number of obs: 46, groups:  Genotype, 3

Fixed effects:
                         Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)              0.939828   0.103867  2.456396   9.048  0.00604 ** 
OriginTransplant        -0.005543   0.054370 40.013465  -0.102  0.91931    
SiteSS                   0.335684   0.053119 40.006608   6.319 1.68e-07 ***
OriginTransplant:SiteSS  0.049977   0.076810 40.006608   0.651  0.51899    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.250              
SiteSS      -0.256  0.489       
OrgnTrn:SSS  0.177 -0.706 -0.692
eta_squared(Chl.lme_TP4)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       6.34e-03 | [0.00, 1.00]
Site        |           0.69 | [0.55, 1.00]
Origin:Site |           0.01 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Chl_TP4.res<-data.frame(summary(Chl.lme_TP4)$coefficients[-1,])
Chl_TP4.res$Predictor<-c("Origin", "Site", "Origin x Site")
Chl_TP4.res$EtaSq<-c(eta_squared(Chl.lme_TP4)$Eta2)
Chl_TP4.res$Response<-rep("Chlorophyll", nrow(Chl_TP4.res))

Effect size of Origin for each Site


##KL
Chl.lme_TP4_KL<-lmer(log(Chl_ug.cm2+1)~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="KL"),])
summary(Chl.lme_TP4_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(Chl_ug.cm2 + 1) ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "KL"), ]

REML criterion at convergence: -14

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.59344 -0.58861 -0.05038  0.48137  1.88220 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.01194  0.1093  
 Residual             0.02028  0.1424  
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                  Estimate Std. Error        df t value Pr(>|t|)   
(Intercept)       0.939828   0.075300  2.739672  12.481  0.00171 **
OriginTransplant -0.005243   0.059554 19.055343  -0.088  0.93076   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.377
eta_squared(Chl.lme_TP4_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       4.07e-04 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Chl.lme_TP4_SS<-lmer(log(Chl_ug.cm2+1)~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="SS"),])
summary(Chl.lme_TP4_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(Chl_ug.cm2 + 1) ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "SS"), ]

REML criterion at convergence: -25

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.80744 -0.47238  0.03677  0.58308  1.31155 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.049098 0.22158 
 Residual             0.009964 0.09982 
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)   
(Intercept)       1.27551    0.13113  2.09990   9.727  0.00885 **
OriginTransplant  0.04346    0.04175 19.00925   1.041  0.31096   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.152
eta_squared(Chl.lme_TP4_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.05 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Chl_TP4.site.res<-data.frame(rbind(summary(Chl.lme_TP4_KL)$coefficients[-1,],
                                     summary(Chl.lme_TP4_SS)$coefficients[-1,]))
Chl_TP4.site.res$Predictor<-c("KL Origin", "SS Origin")
Chl_TP4.site.res$EtaSq<-c(eta_squared(Chl.lme_TP4_KL)$Eta2, eta_squared(Chl.lme_TP4_SS)$Eta2)
Chl_TP4.site.res$Response<-rep("Chlorophyll", nrow(Chl_TP4.site.res))

##Combine results 
Chl_TP4.res<-rbind(Chl_TP4.res, Chl_TP4.site.res)
##Summary statistics by Site and Origin
TP4_Chl.sum<-summarySE(Coral.TP4, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP4_Chl.plot<-ggplot(TP4_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour="Origin")+
  ylim(0, 3.5); TP4_Chl.plot

##Summary statistics by Site and Origin
TP4_Chl.sum<-summarySE(Coral.TP4, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP4_Chl.plot<-ggplot(TP4_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(0.5, 3.25); TP4_Chl.plot

Save Results

##Combine Results
Phys_T4.res<-rbind(Prot.C_TP4.res, Prot.S_TP4.res, Bio.C_TP4.res, Bio.S_TP4.res, Chl_TP4.res)

##Add Timepoint
Phys_T4.res$TimeP<-rep("T4", nrow(Phys_T4.res))

Effect Size over Time

##Dataframe of effect size results
Phys.ES<-rbind(Phys_T1.res, Phys_T2.res, Phys_T3.res, Phys_T4.res)
Phys.ES<-Phys.ES %>% dplyr::rename(p = Pr...t..)
Phys.ES<-Phys.ES[,c("TimeP", "Predictor", "Response", "EtaSq", "p")]

##Site specific results
Phys.ES<-Phys.ES[which(Phys.ES$Predictor=="KL Origin" | Phys.ES$Predictor=="SS Origin"),]
Phys.ES<-Phys.ES %>% separate_wider_delim(cols="Predictor", delim=" ", names=c("Site", "Predictor"), cols_remove = TRUE)

##Add Metric names
Phys.ES$Metric<-ifelse(Phys.ES$Response== "Protein Host", "TP_ug.cm2_C", ifelse(
  Phys.ES$Response== "Protein Symbiont", "TP_ug.cm2_S", ifelse(
    Phys.ES$Response=="Biomass Host", "AFDW_mg.cm2_C", ifelse(
      Phys.ES$Response=="Biomass Symbiont", "AFDW_mg.cm2_S", ifelse(
        Phys.ES$Response=="Chlorophyll", "Chl_ug.cm2", NA)))))

##Add Significance levels
Phys.ES$Sig<-ifelse(Phys.ES$p<0.001, "***", ifelse(Phys.ES$p<0.01, "**", 
            ifelse(Phys.ES$p<0.05, "*", ifelse(Phys.ES$p<0.1, "-", NA))))

Host Biomass

Bio.C.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="AFDW_mg.cm2_C"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Host Biomass")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"))+
   labs(x="Time Point", y=expression(paste("Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Bio.C.ES.plot

Bio.C.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="AFDW_mg.cm2_C"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Host Biomass")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Bio.C.ES.plot

Bio.C.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="AFDW_mg.cm2_C"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Host Biomass")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Bio.C.ES.plot

Bio.C.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="AFDW_mg.cm2_C"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Host Biomass")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Origin Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Bio.C.ES.plot

Symbiont Biomass

Bio.S.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="AFDW_mg.cm2_S"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Symbiont Biomass")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Bio.S.ES.plot

Bio.S.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="AFDW_mg.cm2_S"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Symbiont Biomass")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Bio.S.ES.plot

Bio.S.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="AFDW_mg.cm2_S"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Symbiont Biomass")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Origin Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Bio.S.ES.plot

Symbiont Protein

Prot.S.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="TP_ug.cm2_S"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Symbiont Protein")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Prot.S.ES.plot

Prot.S.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="TP_ug.cm2_S"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Symbiont Protein")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Prot.S.ES.plot

Prot.S.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="TP_ug.cm2_S"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Symbiont Protein")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Origin Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Prot.S.ES.plot

Chlorophyll

Chl.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="Chl_ug.cm2"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Chlorophyll")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Chl.ES.plot

Chl.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="Chl_ug.cm2"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Chlorophyll")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Chl.ES.plot

Chl.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="Chl_ug.cm2"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Chlorophyll")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Origin Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Chl.ES.plot

Figures

Figure 3 Univariate Physiology

Adjust for Panel

##Biomass Host
TP1_BioHost.plot<-TP1_BioHost.plot+ ggtitle("TP1")+ labs(x="")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, face="bold", hjust=0.5), 
        legend.position=c(0.5, 0.85), legend.direction="horizontal")+
  guides(color=guide_legend(nrow=2, byrow=FALSE)) 

TP2_BioHost.plot<-TP2_BioHost.plot+ ggtitle("TP2")+ labs(x="", y="") +
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, face="bold", hjust=0.5), 
        legend.position="none")

TP3_BioHost.plot<-TP3_BioHost.plot+ ggtitle("TP3")+ labs(x="", y="") +
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, face="bold", hjust=0.5), 
        legend.position="none")

TP4_BioHost.plot<-TP4_BioHost.plot+ ggtitle("TP4")+ labs(x="", y="") +
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, face="bold", hjust=0.5), 
        legend.position="none")

Bio.C.ES.plot<-Bio.C.ES.plot + theme(legend.position=c(.15, .8))

##Biomass Symbiont
TP1_BioSym.plot<-TP1_BioSym.plot + labs(x="") + theme(legend.position="none")

TP2_BioSym.plot<-TP2_BioSym.plot + labs(x="", y="") + theme(legend.position="none")

TP3_BioSym.plot<-TP3_BioSym.plot + labs(x="", y="") + theme(legend.position="none")

TP4_BioSym.plot<-TP4_BioSym.plot + labs(x="", y="") + theme(legend.position="none")

Bio.S.ES.plot<-Bio.S.ES.plot + theme(legend.position="none") 

##Protein Symbiont
TP1_ProtSym.plot<-TP1_ProtSym.plot + labs(x="") + theme(legend.position="none")

TP2_ProtSym.plot<-TP2_ProtSym.plot + labs(x="", y="") + theme(legend.position="none")

TP3_ProtSym.plot<-TP3_ProtSym.plot + labs(x="", y="") + theme(legend.position="none")

TP4_ProtSym.plot<-TP4_ProtSym.plot + labs(x="", y="") + theme(legend.position="none")

Prot.S.ES.plot<-Prot.S.ES.plot + theme(legend.position="none") 

##Chlorophyll
TP1_Chl.plot<-TP1_Chl.plot + theme(legend.position="none")

TP2_Chl.plot<-TP2_Chl.plot + labs(y="") + theme(legend.position="none")

TP3_Chl.plot<-TP3_Chl.plot + labs(y="") + theme(legend.position="none")

TP4_Chl.plot<-TP4_Chl.plot + labs(y="") + theme(legend.position="none")

Chl.ES.plot<-Chl.ES.plot + theme(legend.position="none")

Figure 3

##Create Panel
Phys_fig<-plot_grid(TP1_BioHost.plot, TP2_BioHost.plot, 
                      TP3_BioHost.plot, TP4_BioHost.plot, Bio.C.ES.plot, 
                      TP1_BioSym.plot, TP2_BioSym.plot, 
                      TP3_BioSym.plot, TP4_BioSym.plot, Bio.S.ES.plot, 
                      TP1_ProtSym.plot, TP2_ProtSym.plot, 
                      TP3_ProtSym.plot, TP4_ProtSym.plot, Prot.S.ES.plot, 
                      TP1_Chl.plot, TP2_Chl.plot, 
                      TP3_Chl.plot, TP4_Chl.plot, Chl.ES.plot,
                    rel_widths=c(0.8, 0.8, 0.8, 0.8, 1), rel_heights = 1,
                    nrow=4, ncol=5, byrow=T, labels = NULL)
Warning: Removed 5 rows containing missing values (`geom_text()`).Warning: Removed 6 rows containing missing values (`geom_text()`).Warning: Removed 7 rows containing missing values (`geom_text()`).Warning: Removed 4 rows containing missing values (`geom_text()`).
##Save Figure
ggsave(filename="Figures/02_Physiology/Fig2_Physiology.png", plot=Phys_fig, dpi=300, width=16, height=16, units="in")

Tables

Table S3A Physiology PERMANOVA and PERMDISP

##Combine Results Tables
TableS3_Phys.PERM<-data.frame(rbind(PERM_T1.res, PERM_T2.res, PERM_T3.res, PERM_T4.res))

##Organize
names(TableS3_Phys.PERM)
[1] "Df"         "SumOfSqs"   "F"          "parOmegaSq" "Pr..F."     "Predictor"  "p_DISP"    
[8] "Timepoint" 
TableS3_Phys.PERM<-TableS3_Phys.PERM %>% dplyr::rename( DF = Df, SS = SumOfSqs, EffectSize = parOmegaSq, p = Pr..F.)
TableS3_Phys.PERM<-TableS3_Phys.PERM[,c("Timepoint", "Predictor", "DF", "SS", "F",   "EffectSize", "p", "p_DISP")]

#Round to 4 digits
TableS3_Phys.PERM$SS<-round(TableS3_Phys.PERM$SS, 3)
TableS3_Phys.PERM$F<-round(TableS3_Phys.PERM$F, 3)
TableS3_Phys.PERM$EffectSize<-round(TableS3_Phys.PERM$EffectSize, 3)
TableS3_Phys.PERM$p<-round(TableS3_Phys.PERM$p, 3)
TableS3_Phys.PERM$p_DISP<-round(TableS3_Phys.PERM$p_DISP, 3)

##Write Out Table
write.csv(TableS3_Phys.PERM, "Tables/TableS3_Physiology_PERM_Results.csv", row.names=FALSE)

Table S4 Physiology Univariate LM

##Combine Results Tables
TableS4_Phys.LM<-data.frame(rbind(Phys_T1.res, Phys_T2.res, Phys_T3.res, Phys_T4.res))

##Organize
names(TableS4_Phys.LM)
[1] "Estimate"   "Std..Error" "df"         "t.value"    "Pr...t.."   "Predictor"  "EtaSq"     
[8] "Response"   "TimeP"     
TableS4_Phys.LM<-TableS4_Phys.LM %>% dplyr::rename(SE = Std..Error, DF = df, t = t.value, p = Pr...t.., EffectSize = EtaSq, Timepoint = TimeP)
TableS4_Phys.LM<-TableS4_Phys.LM[,c("Timepoint", "Response", "Predictor", "Estimate", "SE", "DF", "t", "p", "EffectSize")]

#Round to 3 digits
TableS4_Phys.LM$Estimate<-round(TableS4_Phys.LM$Estimate, 3)
TableS4_Phys.LM$SE<-round(TableS4_Phys.LM$SE, 3)
TableS4_Phys.LM$t<-round(TableS4_Phys.LM$t, 3)
TableS4_Phys.LM$p<-round(TableS4_Phys.LM$p, 3)
TableS4_Phys.LM$EffectSize<-round(TableS4_Phys.LM$EffectSize, 3)

#Integer
TableS4_Phys.LM$DF<-round(TableS4_Phys.LM$DF, 0)

##Write Out Table
write.csv(TableS4_Phys.LM, "Tables/TableS4_Physiology_LM_Results.csv", row.names=FALSE)
LS0tDQp0aXRsZTogIkNvcmFsIFBoeXNpb2xvZ3kgRm9sbG93aW5nIFJlY2lwcm9jYWwgVHJhbnNwbGFudCINCmF1dGhvcjogIlNlcmVuYSBIYWNrZXJvdHQiDQpkYXRlOiAiMS8xLzIwMjQiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KIyBTZXR1cA0KDQpgYGB7ciBTZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkNCmBgYA0KDQoNCiMjIyBMb2FkIFBhY2thZ2VzDQpgYGB7cn0NCiMjSW5zdGFsbCBQYWNrYWdlcyBpZiBOZWVkZWQNCmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikNCmlmICghcmVxdWlyZSgiY293cGxvdCIpKSBpbnN0YWxsLnBhY2thZ2VzKCJjb3dwbG90IikNCmlmICghcmVxdWlyZSgiUm1pc2MiKSkgaW5zdGFsbC5wYWNrYWdlcygiUm1pc2MiKQ0KaWYgKCFyZXF1aXJlKCJsbWU0IikpIGluc3RhbGwucGFja2FnZXMoImxtZTQiKQ0KaWYgKCFyZXF1aXJlKCJ2ZWdhbiIpKSBpbnN0YWxsLnBhY2thZ2VzKCJ2ZWdhbiIpDQppZiAoIXJlcXVpcmUoImNvcnJwbG90IikpIGluc3RhbGwucGFja2FnZXMoImNvcnJwbG90IikNCmlmICghcmVxdWlyZSgiREhBUk1hIikpIGluc3RhbGwucGFja2FnZXMoIkRIQVJNYSIpDQppZiAoIXJlcXVpcmUoImVmZmVjdHNpemUiKSkgaW5zdGFsbC5wYWNrYWdlcygiZWZmZWN0c2l6ZSIpDQppZiAoIXJlcXVpcmUoImVtbWVhbnMiKSkgaW5zdGFsbC5wYWNrYWdlcygiZW1tZWFucyIpDQppZiAoIXJlcXVpcmUoIkhtaXNjIikpIGluc3RhbGwucGFja2FnZXMoIkhtaXNjIikNCmlmICghcmVxdWlyZSgiZHBseXIiKSkgaW5zdGFsbC5wYWNrYWdlcygiZHBseXIiKQ0KaWYgKCFyZXF1aXJlKCJ0aWR5ciIpKSBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5ciIpDQoNCiMjTG9hZCBQYWNrYWdlcw0KbGlicmFyeShnZ3Bsb3QyKSAjUmVxdWlyZWQgZm9yIGdncGxvdHMNCmxpYnJhcnkoY293cGxvdCkgI1JlcXVpcmVkIGZvciBwbG90dGluZyBwYW5lbCBmaWd1cmVzDQpsaWJyYXJ5KFJtaXNjKSAjUmVxdWlyZWQgZm9yIFN1bW1hcnlTRSBmdW5jdGlvbg0KbGlicmFyeShsbWU0KSAjUmVxdWlyZWQgZm9yIG1peGVkIGVmZmVjdHMgbW9kZWxpbmcNCmxpYnJhcnkodmVnYW4pICNSZXF1aXJlZCBmb3IgbXVsdGl2YXJpYXRlIGFuYWx5c2lzIFBFUk0NCmxpYnJhcnkoY29ycnBsb3QpICNSZXF1aXJlZCBmb3IgY29ycmVsYXRpb24gcGxvdA0KbGlicmFyeShESEFSTWEpICNSZXF1aXJlZCB0byBjaGVjayByZXNpZHVhbHMgb2YgbWl4ZWQgZWZmZWN0cyBtb2RlbHMNCmxpYnJhcnkoZWZmZWN0c2l6ZSkgI1JlcXVpcmVkIGZvciBldGFfc3F1YXJlZCBlZmZlY3Qgc2l6ZXMNCmxpYnJhcnkoZW1tZWFucykgI1JlcXVpcmVkIGZvciBwYWlyd2lzZSBjb21wYXJpc29ucyANCmxpYnJhcnkoSG1pc2MpICNSZXF1aXJlZCBmb3IgY29ycmVsYXRpb25zDQpsaWJyYXJ5KGRwbHlyKSAjUmVxdWlyZWQgZm9yIGRhdGFmcmFtZSBvcmdhbml6YXRpb24NCmxpYnJhcnkodGlkeXIpICNSZXF1aXJlZCBmb3IgZGF0YWZyYW1lIG9yZ2FuaXphdGlvbg0KDQpgYGANCg0KDQojIyMgR3JhcGhpbmcgUGFyYW1ldGVycw0KYGBge3J9DQojTm90ZTogUnVuICJHcmFwaGluZyBQYXJhbWV0ZXJzIiBzZWN0aW9uIGZyb20gMDFfRXhwZXJpbWVudGFsU2V0dXAuUm1kIGZpbGUNCmBgYA0KDQoNCiMgU2FtcGxlIERhdGEgYW5kIE1ldGFkYXRhDQoNCiMjIyBMb2FkIGFuZCBPcmdhbml6ZSBEYXRhDQpgYGB7cn0NCiMjTG9hZCBEYXRhDQojTm90ZTogUGh5c2lvbG9naWNhbCBtZXRyaWNzIGNhbGN1bGF0ZWQgaW4gMDJfUGh5c2lvbG9neU1ldHJpY3MuUiBmaWxlDQpDb3JhbDwtcmVhZC5jc3YoIk91dHB1dHMvQ29yYWxEYXRhLmNzdiIsIGhlYWRlcj1UUlVFKQ0KDQojI1NldCBmYWN0b3IgdmFyaWFibGVzDQpDb3JhbCRUaW1lUDwtZmFjdG9yKENvcmFsJFRpbWVQLCBsZXZlbHM9YygiVFAxIiwgIlRQMiIsICJUUDMiLCAiVFA0IikpDQpDb3JhbCRTaXRlPC1mYWN0b3IoQ29yYWwkU2l0ZSwgbGV2ZWxzPWMoIktMIiwgIlNTIikpDQpDb3JhbCRHZW5vdHlwZTwtZmFjdG9yKENvcmFsJEdlbm90eXBlLCBsZXZlbHM9YygiQUM4IiwgIkFDMTAiLCAiQUMxMiIpKQ0KQ29yYWwkT3JpZzwtZmFjdG9yKENvcmFsJE9yaWcsIGxldmVscz1jKCJOIiwgIlQiKSkNCkNvcmFsJE9yaWdpbjwtZmFjdG9yKENvcmFsJE9yaWdpbiwgbGV2ZWxzPWMoIk5hdGl2ZSIsICJUcmFuc3BsYW50IikpDQpDb3JhbCRTaXRlLk9yaWc8LWZhY3RvcihDb3JhbCRTaXRlLk9yaWcsIGxldmVscz1jKCJLTC5OIiwgIktMLlQiLCAiU1MuTiIsICJTUy5UIikpDQoNCg0KYGBgDQoNCg0KIyBNdWx0aXZhcmlhdGUgQW5hbHlzaXMNCg0KIyMjIGFkb25pcyBPbWVnYVNxIEZ1bmN0aW9uDQpgYGB7cn0NCiMnIENhbGN1bGF0ZSAocGFydGlhbCkgT21lZ2Etc3F1YXJlZCAoZWZmZWN0LXNpemUgY2FsY3VsYXRpb24pIGZvciBQRVJNQU5PVkEgYW5kIGFkZCBpdCB0byB0aGUgaW5wdXQgb2JqZWN0DQojJw0KIycgQHBhcmFtIGFkb25pc091dHB1dCBBbiBhZG9uaXMgb2JqZWN0DQojJyBAcGFyYW0gcGFydGlhbCBTaG91bGQgcGFydGlhbCBvbWVnYS1zcXVhcmVkIGJlIGNhbGN1bGF0ZWQgKHNhbXBsZSBzaXplIGFkanVzdGVkKS4gRGVmYXVsdCBUUlVFDQojJyBAcmV0dXJuIE9yaWdpbmFsIGFkb25pcyBvYmplY3Qgd2l0aCB0aGUgKHBhcnRpYWwpIE9tZWdhLXNxdWFyZWQgdmFsdWVzIGFkZGVkDQojJyBAaW1wb3J0IHZlZ2FuDQojJyBAZXhwb3J0DQphZG9uaXNfT21lZ2FTcSA8LSBmdW5jdGlvbihhZG9uaXNPdXRwdXQsIHBhcnRpYWwgPSBUUlVFKXsNCiAgICBpZighKGlzKGFkb25pc091dHB1dCwgImFkb25pcyIpIHx8IGlzKGFkb25pc091dHB1dCwgImFub3ZhLmNjYSIpKSkNCiAgICAgICAgc3RvcCgiSW5wdXQgc2hvdWxkIGJlIGFuIGFkb25pcyBvYmplY3QiKQ0KICAgIGlmIChpcyhhZG9uaXNPdXRwdXQsICJhbm92YS5jY2EiKSkgew0KICAgICAgICBhb3ZfdGFiIDwtIGFkb25pc091dHB1dA0KICAgICAgICBhb3ZfdGFiJE1lYW5TcXMgPC0gYW92X3RhYiRTdW1PZlNxcyAvIGFvdl90YWIkRGYNCiAgICAgICAgYW92X3RhYiRNZWFuU3FzW2xlbmd0aChhb3ZfdGFiJERmKV0gPC0gTkENCiAgICB9IGVsc2Ugew0KICAgICAgICBhb3ZfdGFiIDwtIGFkb25pc091dHB1dCRhb3YudGFiDQogICAgfQ0KICAgIGhlYWRpbmcgPC0gYXR0cihhb3ZfdGFiLCAiaGVhZGluZyIpDQogICAgTVNfcmVzIDwtIGFvdl90YWJbcG1hdGNoKCJSZXNpZHVhbCIsIHJvd25hbWVzKGFvdl90YWIpKSwgIk1lYW5TcXMiXQ0KICAgIFNTX3RvdCA8LSBhb3ZfdGFiW3Jvd25hbWVzKGFvdl90YWIpID09ICJUb3RhbCIsICJTdW1zT2ZTcXMiXQ0KICAgIE4gPC0gYW92X3RhYltyb3duYW1lcyhhb3ZfdGFiKSA9PSAiVG90YWwiLCAiRGYiXSArIDENCiAgICBpZihwYXJ0aWFsKXsNCiAgICAgICAgb21lZ2EgPC0gYXBwbHkoYW92X3RhYiwgMSwgZnVuY3Rpb24oeCkgKHhbIkRmIl0qKHhbIk1lYW5TcXMiXS1NU19yZXMpKS8oeFsiRGYiXSp4WyJNZWFuU3FzIl0rKE4teFsiRGYiXSkqTVNfcmVzKSkNCiAgICAgICAgYW92X3RhYiRwYXJPbWVnYVNxIDwtIGMob21lZ2FbMToobGVuZ3RoKG9tZWdhKS0yKV0sIE5BLCBOQSkNCiAgICB9IGVsc2Ugew0KICAgICAgICBvbWVnYSA8LSBhcHBseShhb3ZfdGFiLCAxLCBmdW5jdGlvbih4KSAoeFsiU3Vtc09mU3FzIl0teFsiRGYiXSpNU19yZXMpLyhTU190b3QrTVNfcmVzKSkNCiAgICAgICAgYW92X3RhYiRPbWVnYVNxIDwtIGMob21lZ2FbMToobGVuZ3RoKG9tZWdhKS0yKV0sIE5BLCBOQSkNCiAgICB9DQogICAgaWYgKGlzKGFkb25pc091dHB1dCwgImFkb25pcyIpKQ0KICAgICAgICBjbl9vcmRlciA8LSBjKCJEZiIsICJTdW1zT2ZTcXMiLCAiTWVhblNxcyIsICJGLk1vZGVsIiwgIlIyIiwNCiAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydGlhbCkgInBhck9tZWdhU3EiIGVsc2UgIk9tZWdhU3EiLCAiUHIoPkYpIikNCiAgICBlbHNlDQogICAgICAgIGNuX29yZGVyIDwtIGMoIkRmIiwgIlN1bU9mU3FzIiwgIkYiLCBpZiAocGFydGlhbCkgInBhck9tZWdhU3EiIGVsc2UgIk9tZWdhU3EiLA0KICAgICAgICAgICAgICAgICAgICAgICJQcig+RikiKQ0KICAgIGFvdl90YWIgPC0gYW92X3RhYlssIGNuX29yZGVyXQ0KICAgIGF0dHIoYW92X3RhYiwgIm5hbWVzIikgPC0gY25fb3JkZXINCiAgICBhdHRyKGFvdl90YWIsICJoZWFkaW5nIikgPC0gaGVhZGluZw0KICAgIGlmIChpcyhhZG9uaXNPdXRwdXQsICJhZG9uaXMiKSkNCiAgICAgICAgYWRvbmlzT3V0cHV0JGFvdi50YWIgPC0gYW92X3RhYg0KICAgIGVsc2UNCiAgICAgICAgYWRvbmlzT3V0cHV0IDwtIGFvdl90YWINCiAgICByZXR1cm4oYWRvbmlzT3V0cHV0KQ0KfQ0KYGBgDQoNCg0KIyMjIENoZWNrIENvcnJlbGF0aW9uDQpgYGB7cn0NCiMjUmVtb3ZlIE5BJ3MNCm5hbWVzKENvcmFsKQ0KQ29yYWwucm08LW5hLm9taXQoQ29yYWwpDQoNCiMjTG9nICsxIHRyYW5zZm9ybSANCkNvcmFsLmxvZzwtQ29yYWwucm0NCkNvcmFsLmxvZ1ssLWMoMToxMCldPC1sb2coQ29yYWwucm1bLC1jKDE6MTApXSsxKQ0KICANClBoeXMuY29yPC1yY29ycihhcy5tYXRyaXgoQ29yYWwubG9nWywtYygxOjEwKV0pLCB0eXBlPSJwZWFyc29uIikNClBoeXMuY29yDQoNCmRpYWcoUGh5cy5jb3IkUCk8LTANCg0KY29ycnBsb3QoUGh5cy5jb3IkciwgdHlwZT0idXBwZXIiLCBvcmRlcj0iaGNsdXN0IiwgDQogICAgICAgICBwLm1hdCA9IFBoeXMuY29yJFAsIHNpZy5sZXZlbCA9IDAuMDEsIGluc2lnID0gImJsYW5rIikNCg0KYGBgDQoNCg0KIyMjIFRQMQ0KYGBge3J9DQojI1N1YnNldCBUaW1lcG9pbnQgMSANCkNvcmFsLmxvZ19UUDE8LXN1YnNldChDb3JhbC5sb2csIFRpbWVQPT0iVFAxIikNCg0KYGBgDQoNCiMjIyMgUEVSTUFOT1ZBDQpgYGB7cn0NCiMjUEVSTUFOT1ZBDQpDb3JhbC5UUDEucGVybTwtYWRvbmlzMih2ZWdkaXN0KENvcmFsLmxvZ19UUDFbLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKX4gQ29yYWwubG9nX1RQMSRPcmlnaW4gKiBDb3JhbC5sb2dfVFAxJFNpdGUsIGRhdGE9Q29yYWwubG9nX1RQMSwgc3RyYXRhPUNvcmFsLmxvZ19UUDEkR2Vub3R5cGUsIG1ldGhvZD0iZXVjbGlkZWFuIikNCg0KIyNFZmZlY3QgU2l6ZQ0KYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAxLnBlcm0pDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBPcmlnaW4NClRQMS5kaXNwX29yaWc8LWFub3ZhKGJldGFkaXNwZXIodmVnZGlzdChDb3JhbC5sb2dfVFAxWyxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIiksIENvcmFsLmxvZ19UUDEkT3JpZ2luKSkNClRQMS5kaXNwX29yaWcNCg0KIyNDaGVjayBkaXNwZXJzaW9uIGJ5IFNpdGUNClRQMS5kaXNwX3NpdGU8LWFub3ZhKGJldGFkaXNwZXIodmVnZGlzdChDb3JhbC5sb2dfVFAxWyxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIiksIENvcmFsLmxvZ19UUDEkU2l0ZSkpDQpUUDEuZGlzcF9zaXRlDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBPcmlnaW46U2l0ZQ0KVFAxLmRpc3Bfb3M8LWFub3ZhKGJldGFkaXNwZXIodmVnZGlzdChDb3JhbC5sb2dfVFAxWyxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIiksIENvcmFsLmxvZ19UUDEkT3JpZ2luOkNvcmFsLmxvZ19UUDEkU2l0ZSkpDQpUUDEuZGlzcF9vcw0KDQojI1NhdmUgcmVzdWx0cw0KUEVSTV9UMS5yZXM8LWRhdGEuZnJhbWUoYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAxLnBlcm0pWzE6MyxdKQ0KUEVSTV9UMS5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNClBFUk1fVDEucmVzJHBfRElTUDwtYyhUUDEuZGlzcF9vcmlnJGBQcig+RilgWzFdLCBUUDEuZGlzcF9zaXRlJGBQcig+RilgWzFdLCBUUDEuZGlzcF9vcyRgUHIoPkYpYFsxXSkNCmBgYA0KUGh5c2lvbG9neSBkaWZmZXJzIHNpZ25pZmljYW50bHkgYnkgT3JpZ2luIGFuZCB0aGUgZWZmZWN0IG9mIE9yaWdpbiBkaWZmZXJzIGJldHdlZW4gU2l0ZXMuDQoNCiMjIyMgRWZmZWN0IFNpemUNCkNhbGN1bGF0ZSBFZmZlY3QgU2l6ZSBvZiBPcmlnaW4gZm9yIGVhY2ggU2l0ZQ0KYGBge3J9DQojI0tMDQojI1BFUk1BTk9WQQ0KQ29yYWwuVFAxLnBlcm1fS0w8LWFkb25pczIodmVnZGlzdChDb3JhbC5sb2dfVFAxW3doaWNoKENvcmFsLmxvZ19UUDEkU2l0ZT09IktMIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpfiBDb3JhbC5sb2dfVFAxJE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFAxJFNpdGU9PSJLTCIpXSwgZGF0YT1Db3JhbC5sb2dfVFAxW3doaWNoKENvcmFsLmxvZ19UUDEkU2l0ZT09IktMIiksXSwgc3RyYXRhPUNvcmFsLmxvZ19UUDEkR2Vub3R5cGVbd2hpY2goQ29yYWwubG9nX1RQMSRTaXRlPT0iS0wiKV0sIG1ldGhvZD0iZXVjbGlkZWFuIikNCg0KIyNFZmZlY3QgU2l6ZQ0KYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAxLnBlcm1fS0wpDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBPcmlnaW4NClRQMS5LTC5kaXNwX29yaWc8LWFub3ZhKGJldGFkaXNwZXIodmVnZGlzdChDb3JhbC5sb2dfVFAxW3doaWNoKENvcmFsLmxvZ19UUDEkU2l0ZT09IktMIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAxJE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFAxJFNpdGU9PSJLTCIpXSkpDQpUUDEuS0wuZGlzcF9vcmlnDQoNCiMjU1MNCiMjUEVSTUFOT1ZBDQpDb3JhbC5UUDEucGVybV9TUzwtYWRvbmlzMih2ZWdkaXN0KENvcmFsLmxvZ19UUDFbd2hpY2goQ29yYWwubG9nX1RQMSRTaXRlPT0iU1MiKSxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIil+IENvcmFsLmxvZ19UUDEkT3JpZ2luW3doaWNoKENvcmFsLmxvZ19UUDEkU2l0ZT09IlNTIildLCBkYXRhPUNvcmFsLmxvZ19UUDFbd2hpY2goQ29yYWwubG9nX1RQMSRTaXRlPT0iU1MiKSxdLCBzdHJhdGE9Q29yYWwubG9nX1RQMSRHZW5vdHlwZVt3aGljaChDb3JhbC5sb2dfVFAxJFNpdGU9PSJTUyIpXSwgbWV0aG9kPSJldWNsaWRlYW4iKQ0KDQojI0VmZmVjdCBTaXplDQphZG9uaXNfT21lZ2FTcShDb3JhbC5UUDEucGVybV9TUykNCg0KIyNDaGVjayBkaXNwZXJzaW9uIGJ5IE9yaWdpbg0KVFAxLlNTLmRpc3Bfb3JpZzwtYW5vdmEoYmV0YWRpc3Blcih2ZWdkaXN0KENvcmFsLmxvZ19UUDFbd2hpY2goQ29yYWwubG9nX1RQMSRTaXRlPT0iU1MiKSxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIiksIENvcmFsLmxvZ19UUDEkT3JpZ2luW3doaWNoKENvcmFsLmxvZ19UUDEkU2l0ZT09IlNTIildKSkNClRQMS5TUy5kaXNwX29yaWcNCg0KIyNTYXZlIHJlc3VsdHMNClBFUk1fVDEuc2l0ZS5yZXM8LWRhdGEuZnJhbWUoYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAxLnBlcm1fS0wpWzEsXSkNClBFUk1fVDEuc2l0ZS5yZXM8LXJiaW5kKFBFUk1fVDEuc2l0ZS5yZXMsIGRhdGEuZnJhbWUoYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAxLnBlcm1fU1MpWzEsXSkpDQpQRVJNX1QxLnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpQRVJNX1QxLnNpdGUucmVzJHBfRElTUDwtYyhUUDEuS0wuZGlzcF9vcmlnJGBQcig+RilgWzFdLCBUUDEuU1MuZGlzcF9vcmlnJGBQcig+RilgWzFdKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANClBFUk1fVDEucmVzPC1yYmluZChQRVJNX1QxLnJlcywgUEVSTV9UMS5zaXRlLnJlcykNClBFUk1fVDEucmVzJFRpbWVwb2ludDwtcmVwKCJUMSIsIG5yb3coUEVSTV9UMS5yZXMpKQ0KDQpgYGANCg0KIyMjIyBWYXJpYW5jZSBQYXJ0aXRpb25pbmcNCmBgYHtyfQ0KIyNWYXJpYW5jZSBQYXJ0aXRpb25pbmcNCkNvcmFsLlRQMS52cDwtdmFycGFydChDb3JhbC5sb2dfVFAxWyxjKDExOjE0LCAxNildLCBDb3JhbC5sb2dfVFAxJE9yaWdpbiwgQ29yYWwubG9nX1RQMSRTaXRlLCBDb3JhbC5sb2dfVFAxJEdlbm90eXBlKQ0KQ29yYWwuVFAxLnZwJHBhcnQNCg0KIyNDaGVjayBtb2RlbCBzaWduaWZpY2FuY2UNCmFub3ZhKHJkYShDb3JhbC5sb2dfVFAxWyxjKDExOjE0LCAxNildfiBDb3JhbC5sb2dfVFAxJE9yaWdpbiArIENvcmFsLmxvZ19UUDEkU2l0ZSArIENvcmFsLmxvZ19UUDEkR2Vub3R5cGUpKQ0KDQojI0NoZWNrIHZhcmlhbmNlIGV4cGxhaW5lZCBieSBtb2RlbA0KUnNxdWFyZUFkaihyZGEoQ29yYWwubG9nX1RQMVssYygxMToxNCwgMTYpXX4gQ29yYWwubG9nX1RQMSRPcmlnaW4gKyBDb3JhbC5sb2dfVFAxJFNpdGUgKyBDb3JhbC5sb2dfVFAxJEdlbm90eXBlKSkkYWRqLnIuc3F1YXJlZCoxMDANCg0KIyNDaGVjayBlZmZlY3Qgb2YgT3JpZ2luIA0KYW5vdmEocmRhKENvcmFsLmxvZ19UUDFbLGMoMTE6MTQsIDE2KV0sIENvcmFsLmxvZ19UUDEkT3JpZ2luKSkNCmFub3ZhKHJkYShDb3JhbC5sb2dfVFAxWyxjKDExOjE0LCAxNildLCBDb3JhbC5sb2dfVFAxJE9yaWdpbiwgQ29yYWwubG9nX1RQMVssYyg0OjUpXSkpDQoNCiMjQ2hlY2sgZWZmZWN0IG9mIFNpdGUgDQphbm92YShyZGEoQ29yYWwubG9nX1RQMVssYygxMToxNCwgMTYpXSwgQ29yYWwubG9nX1RQMSRTaXRlKSkNCmFub3ZhKHJkYShDb3JhbC5sb2dfVFAxWyxjKDExOjE0LCAxNildLCBDb3JhbC5sb2dfVFAxJFNpdGUsIENvcmFsLmxvZ19UUDFbLGMoNSw3KV0pKQ0KDQojI0NoZWNrIGVmZmVjdCBvZiBHZW5vdHlwZSANCmFub3ZhKHJkYShDb3JhbC5sb2dfVFAxWyxjKDExOjE0LCAxNildLCBDb3JhbC5sb2dfVFAxJEdlbm90eXBlKSkNCmFub3ZhKHJkYShDb3JhbC5sb2dfVFAxWyxjKDExOjE0LCAxNildLCBDb3JhbC5sb2dfVFAxJEdlbm90eXBlLCBDb3JhbC5sb2dfVFAxWyxjKDQsNyldKSkNCg0KDQpgYGANClRoZSBtb2RlbCBpcyBzaWduaWZpY2FudCAocCA9IDAuMDAxKSBhbmQgZXhwbGFpbnMgMzUuMTQlIG9mIHRoZSB2YXJpYW5jZSBvZiBwaHlzaW9sb2d5LiBUaGUgZWZmZWN0IG9mIE9yaWdpbiAoY29udHJvbGxpbmcgZm9yIFNpdGUgYW5kIEdlbm90eXBlKSBpcyBzaWduaWZpY2FudCAocCA9IDAuMDEzKSBhbmQgZXhwbGFpbnMgMy45MiUuIFRoZSBlZmZlY3Qgb2YgU2l0ZSAoY29udHJvbGxpbmcgZm9yIE9yaWdpbiBhbmQgR2Vub3R5cGUpIGlzIHNpZ25pZmljYW50IChwID0gMC4wMDEpIGFuZCBleHBsYWlucyA1LjczJS4gVGhlIGVmZmVjdCBvZiBHZW5vdHlwZSAoY29udHJvbGxpbmcgZm9yIE9yaWdpbiBhbmQgU2l0ZSkgaXMgc2lnbmlmaWNhbnQgKHAgPSAwLjAwMSkgYW5kIGV4cGxhaW5zIDI3LjI3JS4gDQoNCg0KIyMjIFRQMg0KYGBge3J9DQojI1N1YnNldCBUaW1lcG9pbnQgMiANCkNvcmFsLmxvZ19UUDI8LXN1YnNldChDb3JhbC5sb2csIFRpbWVQPT0iVFAyIikNCg0KYGBgDQoNCiMjIyMgUEVSTUFOT1ZBDQpgYGB7cn0NCiMjUEVSTUFOT1ZBDQpDb3JhbC5UUDIucGVybTwtYWRvbmlzMih2ZWdkaXN0KENvcmFsLmxvZ19UUDJbLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKX4gQ29yYWwubG9nX1RQMiRPcmlnaW4gKiBDb3JhbC5sb2dfVFAyJFNpdGUsIGRhdGE9Q29yYWwubG9nX1RQMiwgc3RyYXRhPUNvcmFsLmxvZ19UUDIkR2Vub3R5cGUsIG1ldGhvZD0iZXVjbGlkZWFuIikNCg0KIyNFZmZlY3QgU2l6ZQ0KYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAyLnBlcm0pDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBPcmlnaW4NClRQMi5kaXNwX29yaWc8LWFub3ZhKGJldGFkaXNwZXIodmVnZGlzdChDb3JhbC5sb2dfVFAyWyxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIiksIENvcmFsLmxvZ19UUDIkT3JpZ2luKSkNClRQMi5kaXNwX29yaWcNCg0KIyNDaGVjayBkaXNwZXJzaW9uIGJ5IFNpdGUNClRQMi5kaXNwX3NpdGU8LWFub3ZhKGJldGFkaXNwZXIodmVnZGlzdChDb3JhbC5sb2dfVFAyWyxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIiksIENvcmFsLmxvZ19UUDIkU2l0ZSkpDQpUUDIuZGlzcF9zaXRlDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBPcmlnaW46U2l0ZQ0KVFAyLmRpc3Bfb3M8LWFub3ZhKGJldGFkaXNwZXIodmVnZGlzdChDb3JhbC5sb2dfVFAyWyxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIiksIENvcmFsLmxvZ19UUDIkT3JpZ2luOkNvcmFsLmxvZ19UUDIkU2l0ZSkpDQpUUDIuZGlzcF9vcw0KDQojI1NhdmUgcmVzdWx0cw0KUEVSTV9UMi5yZXM8LWRhdGEuZnJhbWUoYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAyLnBlcm0pWzE6MyxdKQ0KUEVSTV9UMi5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNClBFUk1fVDIucmVzJHBfRElTUDwtYyhUUDIuZGlzcF9vcmlnJGBQcig+RilgWzFdLCBUUDIuZGlzcF9zaXRlJGBQcig+RilgWzFdLCBUUDIuZGlzcF9vcyRgUHIoPkYpYFsxXSkNCg0KYGBgDQoNCg0KIyMjIyBFZmZlY3QgU2l6ZQ0KQ2FsY3VsYXRlIEVmZmVjdCBTaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCiMjS0wNCiMjUEVSTUFOT1ZBDQpDb3JhbC5UUDIucGVybV9LTDwtYWRvbmlzMih2ZWdkaXN0KENvcmFsLmxvZ19UUDJbd2hpY2goQ29yYWwubG9nX1RQMiRTaXRlPT0iS0wiKSxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIil+IENvcmFsLmxvZ19UUDIkT3JpZ2luW3doaWNoKENvcmFsLmxvZ19UUDIkU2l0ZT09IktMIildLCBkYXRhPUNvcmFsLmxvZ19UUDJbd2hpY2goQ29yYWwubG9nX1RQMiRTaXRlPT0iS0wiKSxdLCBzdHJhdGE9Q29yYWwubG9nX1RQMiRHZW5vdHlwZVt3aGljaChDb3JhbC5sb2dfVFAyJFNpdGU9PSJLTCIpXSwgbWV0aG9kPSJldWNsaWRlYW4iKQ0KDQojI0VmZmVjdCBTaXplDQphZG9uaXNfT21lZ2FTcShDb3JhbC5UUDIucGVybV9LTCkNCg0KIyNDaGVjayBkaXNwZXJzaW9uIGJ5IE9yaWdpbg0KVFAyLktMLmRpc3Bfb3JpZzwtYW5vdmEoYmV0YWRpc3Blcih2ZWdkaXN0KENvcmFsLmxvZ19UUDJbd2hpY2goQ29yYWwubG9nX1RQMiRTaXRlPT0iS0wiKSxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIiksIENvcmFsLmxvZ19UUDIkT3JpZ2luW3doaWNoKENvcmFsLmxvZ19UUDIkU2l0ZT09IktMIildKSkNClRQMi5LTC5kaXNwX29yaWcNCg0KIyNTUw0KIyNQRVJNQU5PVkENCkNvcmFsLlRQMi5wZXJtX1NTPC1hZG9uaXMyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQMlt3aGljaChDb3JhbC5sb2dfVFAyJFNpdGU9PSJTUyIpLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKX4gQ29yYWwubG9nX1RQMiRPcmlnaW5bd2hpY2goQ29yYWwubG9nX1RQMiRTaXRlPT0iU1MiKV0sIGRhdGE9Q29yYWwubG9nX1RQMlt3aGljaChDb3JhbC5sb2dfVFAyJFNpdGU9PSJTUyIpLF0sIHN0cmF0YT1Db3JhbC5sb2dfVFAyJEdlbm90eXBlW3doaWNoKENvcmFsLmxvZ19UUDIkU2l0ZT09IlNTIildLCBtZXRob2Q9ImV1Y2xpZGVhbiIpDQoNCiMjRWZmZWN0IFNpemUNCmFkb25pc19PbWVnYVNxKENvcmFsLlRQMi5wZXJtX1NTKQ0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgT3JpZ2luDQpUUDIuU1MuZGlzcF9vcmlnPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQMlt3aGljaChDb3JhbC5sb2dfVFAyJFNpdGU9PSJTUyIpLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKSwgQ29yYWwubG9nX1RQMiRPcmlnaW5bd2hpY2goQ29yYWwubG9nX1RQMiRTaXRlPT0iU1MiKV0pKQ0KVFAyLlNTLmRpc3Bfb3JpZw0KDQojI1NhdmUgcmVzdWx0cw0KUEVSTV9UMi5zaXRlLnJlczwtZGF0YS5mcmFtZShhZG9uaXNfT21lZ2FTcShDb3JhbC5UUDIucGVybV9LTClbMSxdKQ0KUEVSTV9UMi5zaXRlLnJlczwtcmJpbmQoUEVSTV9UMi5zaXRlLnJlcywgZGF0YS5mcmFtZShhZG9uaXNfT21lZ2FTcShDb3JhbC5UUDIucGVybV9TUylbMSxdKSkNClBFUk1fVDIuc2l0ZS5yZXMkUHJlZGljdG9yPC1jKCJLTCBPcmlnaW4iLCAiU1MgT3JpZ2luIikNClBFUk1fVDIuc2l0ZS5yZXMkcF9ESVNQPC1jKFRQMi5LTC5kaXNwX29yaWckYFByKD5GKWBbMV0sIFRQMi5TUy5kaXNwX29yaWckYFByKD5GKWBbMV0pDQoNCiMjQ29tYmluZSByZXN1bHRzIA0KUEVSTV9UMi5yZXM8LXJiaW5kKFBFUk1fVDIucmVzLCBQRVJNX1QyLnNpdGUucmVzKQ0KUEVSTV9UMi5yZXMkVGltZXBvaW50PC1yZXAoIlQyIiwgbnJvdyhQRVJNX1QyLnJlcykpDQoNCmBgYA0KDQoNCiMjIyBUUDMNCmBgYHtyfQ0KIyNTdWJzZXQgVGltZXBvaW50IDMgDQpDb3JhbC5sb2dfVFAzPC1zdWJzZXQoQ29yYWwubG9nLCBUaW1lUD09IlRQMyIpDQoNCmBgYA0KDQojIyMjIFBFUk1BTk9WQQ0KYGBge3J9DQojI1BFUk1BTk9WQQ0KQ29yYWwuVFAzLnBlcm08LWFkb25pczIodmVnZGlzdChDb3JhbC5sb2dfVFAzWyxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIil+IENvcmFsLmxvZ19UUDMkT3JpZ2luICogQ29yYWwubG9nX1RQMyRTaXRlLCBkYXRhPUNvcmFsLmxvZ19UUDMsIHN0cmF0YT1Db3JhbC5sb2dfVFAzJEdlbm90eXBlLCBtZXRob2Q9ImV1Y2xpZGVhbiIpDQoNCiMjRWZmZWN0IFNpemUNCmFkb25pc19PbWVnYVNxKENvcmFsLlRQMy5wZXJtKQ0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgT3JpZ2luDQpUUDMuZGlzcF9vcmlnPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQM1ssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAzJE9yaWdpbikpDQpUUDMuZGlzcF9vcmlnDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBTaXRlDQpUUDMuZGlzcF9zaXRlPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQM1ssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAzJFNpdGUpKQ0KVFAzLmRpc3Bfc2l0ZQ0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgT3JpZ2luOlNpdGUNClRQMy5kaXNwX29zPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQM1ssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAzJE9yaWdpbjpDb3JhbC5sb2dfVFAzJFNpdGUpKQ0KVFAzLmRpc3Bfb3MNCg0KIyNTYXZlIHJlc3VsdHMNClBFUk1fVDMucmVzPC1kYXRhLmZyYW1lKGFkb25pc19PbWVnYVNxKENvcmFsLlRQMy5wZXJtKVsxOjMsXSkNClBFUk1fVDMucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpQRVJNX1QzLnJlcyRwX0RJU1A8LWMoVFAzLmRpc3Bfb3JpZyRgUHIoPkYpYFsxXSwgVFAzLmRpc3Bfc2l0ZSRgUHIoPkYpYFsxXSwgVFAzLmRpc3Bfb3MkYFByKD5GKWBbMV0pDQoNCmBgYA0KDQoNCiMjIyMgRWZmZWN0IFNpemUNCkNhbGN1bGF0ZSBFZmZlY3QgU2l6ZSBvZiBPcmlnaW4gZm9yIGVhY2ggU2l0ZQ0KYGBge3J9DQojI0tMDQojI1BFUk1BTk9WQQ0KQ29yYWwuVFAzLnBlcm1fS0w8LWFkb25pczIodmVnZGlzdChDb3JhbC5sb2dfVFAzW3doaWNoKENvcmFsLmxvZ19UUDMkU2l0ZT09IktMIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpfiBDb3JhbC5sb2dfVFAzJE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFAzJFNpdGU9PSJLTCIpXSwgZGF0YT1Db3JhbC5sb2dfVFAzW3doaWNoKENvcmFsLmxvZ19UUDMkU2l0ZT09IktMIiksXSwgc3RyYXRhPUNvcmFsLmxvZ19UUDMkR2Vub3R5cGVbd2hpY2goQ29yYWwubG9nX1RQMyRTaXRlPT0iS0wiKV0sIG1ldGhvZD0iZXVjbGlkZWFuIikNCg0KIyNFZmZlY3QgU2l6ZQ0KYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAzLnBlcm1fS0wpDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBPcmlnaW4NClRQMy5LTC5kaXNwX29yaWc8LWFub3ZhKGJldGFkaXNwZXIodmVnZGlzdChDb3JhbC5sb2dfVFAzW3doaWNoKENvcmFsLmxvZ19UUDMkU2l0ZT09IktMIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAzJE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFAzJFNpdGU9PSJLTCIpXSkpDQpUUDMuS0wuZGlzcF9vcmlnDQoNCiMjU1MNCiMjUEVSTUFOT1ZBDQpDb3JhbC5UUDMucGVybV9TUzwtYWRvbmlzMih2ZWdkaXN0KENvcmFsLmxvZ19UUDNbd2hpY2goQ29yYWwubG9nX1RQMyRTaXRlPT0iU1MiKSxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIil+IENvcmFsLmxvZ19UUDMkT3JpZ2luW3doaWNoKENvcmFsLmxvZ19UUDMkU2l0ZT09IlNTIildLCBkYXRhPUNvcmFsLmxvZ19UUDNbd2hpY2goQ29yYWwubG9nX1RQMyRTaXRlPT0iU1MiKSxdLCBzdHJhdGE9Q29yYWwubG9nX1RQMyRHZW5vdHlwZVt3aGljaChDb3JhbC5sb2dfVFAzJFNpdGU9PSJTUyIpXSwgbWV0aG9kPSJldWNsaWRlYW4iKQ0KDQojI0VmZmVjdCBTaXplDQphZG9uaXNfT21lZ2FTcShDb3JhbC5UUDMucGVybV9TUykNCg0KIyNDaGVjayBkaXNwZXJzaW9uIGJ5IE9yaWdpbg0KVFAzLlNTLmRpc3Bfb3JpZzwtYW5vdmEoYmV0YWRpc3Blcih2ZWdkaXN0KENvcmFsLmxvZ19UUDNbd2hpY2goQ29yYWwubG9nX1RQMyRTaXRlPT0iU1MiKSxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIiksIENvcmFsLmxvZ19UUDMkT3JpZ2luW3doaWNoKENvcmFsLmxvZ19UUDMkU2l0ZT09IlNTIildKSkNClRQMy5TUy5kaXNwX29yaWcNCg0KIyNTYXZlIHJlc3VsdHMNClBFUk1fVDMuc2l0ZS5yZXM8LWRhdGEuZnJhbWUoYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAzLnBlcm1fS0wpWzEsXSkNClBFUk1fVDMuc2l0ZS5yZXM8LXJiaW5kKFBFUk1fVDMuc2l0ZS5yZXMsIGRhdGEuZnJhbWUoYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAzLnBlcm1fU1MpWzEsXSkpDQpQRVJNX1QzLnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpQRVJNX1QzLnNpdGUucmVzJHBfRElTUDwtYyhUUDMuS0wuZGlzcF9vcmlnJGBQcig+RilgWzFdLCBUUDMuU1MuZGlzcF9vcmlnJGBQcig+RilgWzFdKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANClBFUk1fVDMucmVzPC1yYmluZChQRVJNX1QzLnJlcywgUEVSTV9UMy5zaXRlLnJlcykNClBFUk1fVDMucmVzJFRpbWVwb2ludDwtcmVwKCJUMyIsIG5yb3coUEVSTV9UMy5yZXMpKQ0KDQoNCmBgYA0KDQoNCiMjIyBUUDQNCmBgYHtyfQ0KIyNTdWJzZXQgVGltZXBvaW50IDQgDQpDb3JhbC5sb2dfVFA0PC1zdWJzZXQoQ29yYWwubG9nLCBUaW1lUD09IlRQNCIpDQoNCmBgYA0KDQojIyMjIFBFUk1BTk9WQQ0KYGBge3J9DQojI1BFUk1BTk9WQQ0KQ29yYWwuVFA0LnBlcm08LWFkb25pczIodmVnZGlzdChDb3JhbC5sb2dfVFA0WyxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIil+IENvcmFsLmxvZ19UUDQkT3JpZ2luICogQ29yYWwubG9nX1RQNCRTaXRlLCBkYXRhPUNvcmFsLmxvZ19UUDQsIHN0cmF0YT1Db3JhbC5sb2dfVFA0JEdlbm90eXBlLCBtZXRob2Q9ImV1Y2xpZGVhbiIpDQoNCiMjRWZmZWN0IFNpemUNCmFkb25pc19PbWVnYVNxKENvcmFsLlRQNC5wZXJtKQ0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgT3JpZ2luDQpUUDQuZGlzcF9vcmlnPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQNFssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFA0JE9yaWdpbikpDQpUUDQuZGlzcF9vcmlnDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBTaXRlDQpUUDQuZGlzcF9zaXRlPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQNFssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFA0JFNpdGUpKQ0KVFA0LmRpc3Bfc2l0ZQ0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgT3JpZ2luOlNpdGUNClRQNC5kaXNwX29zPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQNFssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFA0JE9yaWdpbjpDb3JhbC5sb2dfVFA0JFNpdGUpKQ0KVFA0LmRpc3Bfb3MNCg0KIyNTYXZlIHJlc3VsdHMNClBFUk1fVDQucmVzPC1kYXRhLmZyYW1lKGFkb25pc19PbWVnYVNxKENvcmFsLlRQNC5wZXJtKVsxOjMsXSkNClBFUk1fVDQucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpQRVJNX1Q0LnJlcyRwX0RJU1A8LWMoVFA0LmRpc3Bfb3JpZyRgUHIoPkYpYFsxXSwgVFA0LmRpc3Bfc2l0ZSRgUHIoPkYpYFsxXSwgVFA0LmRpc3Bfb3MkYFByKD5GKWBbMV0pDQoNCmBgYA0KDQoNCiMjIyMgRWZmZWN0IFNpemUNCkNhbGN1bGF0ZSBFZmZlY3QgU2l6ZSBvZiBPcmlnaW4gZm9yIGVhY2ggU2l0ZQ0KYGBge3J9DQojI0tMDQojI1BFUk1BTk9WQQ0KQ29yYWwuVFA0LnBlcm1fS0w8LWFkb25pczIodmVnZGlzdChDb3JhbC5sb2dfVFA0W3doaWNoKENvcmFsLmxvZ19UUDQkU2l0ZT09IktMIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpfiBDb3JhbC5sb2dfVFA0JE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFA0JFNpdGU9PSJLTCIpXSwgZGF0YT1Db3JhbC5sb2dfVFA0W3doaWNoKENvcmFsLmxvZ19UUDQkU2l0ZT09IktMIiksXSwgc3RyYXRhPUNvcmFsLmxvZ19UUDQkR2Vub3R5cGVbd2hpY2goQ29yYWwubG9nX1RQNCRTaXRlPT0iS0wiKV0sIG1ldGhvZD0iZXVjbGlkZWFuIikNCg0KIyNFZmZlY3QgU2l6ZQ0KYWRvbmlzX09tZWdhU3EoQ29yYWwuVFA0LnBlcm1fS0wpDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBPcmlnaW4NClRQNC5LTC5kaXNwX29yaWc8LWFub3ZhKGJldGFkaXNwZXIodmVnZGlzdChDb3JhbC5sb2dfVFA0W3doaWNoKENvcmFsLmxvZ19UUDQkU2l0ZT09IktMIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFA0JE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFA0JFNpdGU9PSJLTCIpXSkpDQpUUDQuS0wuZGlzcF9vcmlnDQoNCiMjU1MNCiMjUEVSTUFOT1ZBDQpDb3JhbC5UUDQucGVybV9TUzwtYWRvbmlzMih2ZWdkaXN0KENvcmFsLmxvZ19UUDRbd2hpY2goQ29yYWwubG9nX1RQNCRTaXRlPT0iU1MiKSxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIil+IENvcmFsLmxvZ19UUDQkT3JpZ2luW3doaWNoKENvcmFsLmxvZ19UUDQkU2l0ZT09IlNTIildLCBkYXRhPUNvcmFsLmxvZ19UUDRbd2hpY2goQ29yYWwubG9nX1RQNCRTaXRlPT0iU1MiKSxdLCBzdHJhdGE9Q29yYWwubG9nX1RQNCRHZW5vdHlwZVt3aGljaChDb3JhbC5sb2dfVFA0JFNpdGU9PSJTUyIpXSwgbWV0aG9kPSJldWNsaWRlYW4iKQ0KDQojI0VmZmVjdCBTaXplDQphZG9uaXNfT21lZ2FTcShDb3JhbC5UUDQucGVybV9TUykNCg0KIyNDaGVjayBkaXNwZXJzaW9uIGJ5IE9yaWdpbg0KVFA0LlNTLmRpc3Bfb3JpZzwtYW5vdmEoYmV0YWRpc3Blcih2ZWdkaXN0KENvcmFsLmxvZ19UUDRbd2hpY2goQ29yYWwubG9nX1RQNCRTaXRlPT0iU1MiKSxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIiksIENvcmFsLmxvZ19UUDQkT3JpZ2luW3doaWNoKENvcmFsLmxvZ19UUDQkU2l0ZT09IlNTIildKSkNClRQNC5TUy5kaXNwX29yaWcNCg0KIyNTYXZlIHJlc3VsdHMNClBFUk1fVDQuc2l0ZS5yZXM8LWRhdGEuZnJhbWUoYWRvbmlzX09tZWdhU3EoQ29yYWwuVFA0LnBlcm1fS0wpWzEsXSkNClBFUk1fVDQuc2l0ZS5yZXM8LXJiaW5kKFBFUk1fVDQuc2l0ZS5yZXMsIGRhdGEuZnJhbWUoYWRvbmlzX09tZWdhU3EoQ29yYWwuVFA0LnBlcm1fU1MpWzEsXSkpDQpQRVJNX1Q0LnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpQRVJNX1Q0LnNpdGUucmVzJHBfRElTUDwtYyhUUDQuS0wuZGlzcF9vcmlnJGBQcig+RilgWzFdLCBUUDQuU1MuZGlzcF9vcmlnJGBQcig+RilgWzFdKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANClBFUk1fVDQucmVzPC1yYmluZChQRVJNX1Q0LnJlcywgUEVSTV9UNC5zaXRlLnJlcykNClBFUk1fVDQucmVzJFRpbWVwb2ludDwtcmVwKCJUNCIsIG5yb3coUEVSTV9UNC5yZXMpKQ0KDQpgYGANCg0KDQojIFVuaXZhcmlhdGUgDQoNCiMjIyBUUDENCg0KYGBge3J9DQojI1N1YnNldCBUaW1lcG9pbnQgMSANCkNvcmFsLlRQMTwtc3Vic2V0KENvcmFsLnJtLCBUaW1lUD09IlRQMSIpDQoNCmBgYA0KDQoNCiMjIyMgUHJvdGVpbiBIb3N0IA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDEkVFBfdWcuY20yX0MpDQpzaGFwaXJvLnRlc3QoQ29yYWwuVFAxJFRQX3VnLmNtMl9DKQ0KI05vcm1hbA0KDQojI01vZGVsIA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNClByb3QuQy5sbWVfVFAxPC1sbWVyKFRQX3VnLmNtMl9Dfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDEpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpQcm90LkMubG1lX3Jlc19UUDEgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBQcm90LkMubG1lX1RQMSwgcGxvdCA9IEYpDQpwbG90KFByb3QuQy5sbWVfcmVzX1RQMSkNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KFByb3QuQy5sbWVfVFAxKQ0KDQpldGFfc3F1YXJlZChQcm90LkMubG1lX1RQMSkNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNClByb3QuQ19UUDEucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoUHJvdC5DLmxtZV9UUDEpJGNvZWZmaWNpZW50c1stMSxdKQ0KUHJvdC5DX1RQMS5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNClByb3QuQ19UUDEucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuQy5sbWVfVFAxKSRFdGEyKQ0KUHJvdC5DX1RQMS5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBIb3N0IiwgbnJvdyhQcm90LkNfVFAxLnJlcykpDQpgYGANCg0KDQojIyMjIFByb3RlaW4gU3ltYmlvbnQgDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQMSRUUF91Zy5jbTJfUykNCnNoYXBpcm8udGVzdChDb3JhbC5UUDEkVFBfdWcuY20yX1MpDQojTm9ybWFsDQoNCiMjTW9kZWwNCiNGdW5jdGlvbiBvZiBTaXRlIGFuZCBPcmlnaW4sIHdpdGggR2Vub3R5cGUgYXMgYSBSYW5kb20gZWZmZWN0DQojSW50ZXJhY3Rpb25zIGJldHdlZW4gT3JpZ2luIGFuZCBTaXRlDQpQcm90LlMubG1lX1RQMTwtbG1lcihUUF91Zy5jbTJfU35PcmlnaW4qU2l0ZSsoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAxKQ0KDQojI0NoZWNrIHJlc2lkdWFscw0KUHJvdC5TLmxtZV9yZXNfVFAxIDwtIHNpbXVsYXRlUmVzaWR1YWxzKGZpdHRlZE1vZGVsID0gUHJvdC5TLmxtZV9UUDEsIHBsb3QgPSBGKQ0KcGxvdChQcm90LlMubG1lX3Jlc19UUDEpDQoNCiMjTW9kZWwgcmVzdWx0cw0Kc3VtbWFyeShQcm90LlMubG1lX1RQMSkNCg0KZXRhX3NxdWFyZWQoUHJvdC5TLmxtZV9UUDEpDQoNCiMjU2F2ZSBtb2RlbCByZXN1bHRzDQpQcm90LlNfVFAxLnJlczwtZGF0YS5mcmFtZShzdW1tYXJ5KFByb3QuUy5sbWVfVFAxKSRjb2VmZmljaWVudHNbLTEsXSkNClByb3QuU19UUDEucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpQcm90LlNfVFAxLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChQcm90LlMubG1lX1RQMSkkRXRhMikNClByb3QuU19UUDEucmVzJFJlc3BvbnNlPC1yZXAoIlByb3RlaW4gU3ltYmlvbnQiLCBucm93KFByb3QuU19UUDEucmVzKSkNCmBgYA0KDQpFZmZlY3Qgc2l6ZSBvZiBPcmlnaW4gZm9yIGVhY2ggU2l0ZQ0KYGBge3J9DQojI0tMDQpQcm90LlMubG1lX1RQMV9LTDwtbG1lcihUUF91Zy5jbTJfU35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMVt3aGljaChDb3JhbC5UUDEkU2l0ZT09IktMIiksXSkNCnN1bW1hcnkoUHJvdC5TLmxtZV9UUDFfS0wpDQpldGFfc3F1YXJlZChQcm90LlMubG1lX1RQMV9LTCkNCg0KDQojI1NTDQpQcm90LlMubG1lX1RQMV9TUzwtbG1lcihUUF91Zy5jbTJfU35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMVt3aGljaChDb3JhbC5UUDEkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoUHJvdC5TLmxtZV9UUDFfU1MpDQpldGFfc3F1YXJlZChQcm90LlMubG1lX1RQMV9TUykNCg0KDQojI1NhdmUgcmVzdWx0cw0KUHJvdC5TX1RQMS5zaXRlLnJlczwtZGF0YS5mcmFtZShyYmluZChzdW1tYXJ5KFByb3QuUy5sbWVfVFAxX0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeShQcm90LlMubG1lX1RQMV9TUykkY29lZmZpY2llbnRzWy0xLF0pKQ0KUHJvdC5TX1RQMS5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KUHJvdC5TX1RQMS5zaXRlLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChQcm90LlMubG1lX1RQMV9LTCkkRXRhMiwgZXRhX3NxdWFyZWQoUHJvdC5TLmxtZV9UUDFfU1MpJEV0YTIpDQpQcm90LlNfVFAxLnNpdGUucmVzJFJlc3BvbnNlPC1yZXAoIlByb3RlaW4gU3ltYmlvbnQiLCBucm93KFByb3QuU19UUDEuc2l0ZS5yZXMpKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANClByb3QuU19UUDEucmVzPC1yYmluZChQcm90LlNfVFAxLnJlcywgUHJvdC5TX1RQMS5zaXRlLnJlcykNCg0KYGBgDQoNCg0KDQpgYGB7ciBQbG90IFByb3RlaW4gU3ltYmlvbnQgVFAxfQ0KIyNTdW1tYXJ5IHN0YXRpc3RpY3MgYnkgU2l0ZSBhbmQgT3JpZ2luDQpUUDFfUHJvdFN5bS5zdW08LXN1bW1hcnlTRShDb3JhbC5UUDEsIG1lYXN1cmV2YXI9IlRQX3VnLmNtMl9TIiwgZ3JvdXB2YXJzPWMoIlNpdGUiLCAiT3JpZ2luIiwgIlNpdGUuT3JpZyIpLCBuYS5ybT1UUlVFKQ0KDQojI1Bsb3QgQXZlcmFnZSBTeW1iaW9udCBQcm90ZWluIGFjcm9zcyBUcmVhdG1lbnRzDQpUUDFfUHJvdFN5bS5wbG90PC1nZ3Bsb3QoVFAxX1Byb3RTeW0uc3VtLCBhZXMoeD1TaXRlLCB5PVRQX3VnLmNtMl9TLCBjb2xvdXI9U2l0ZS5PcmlnKSkgKyANCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9T3JpZy5jb2xvcnMubykrDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49VFBfdWcuY20yX1Mtc2UsIHltYXg9VFBfdWcuY20yX1Mrc2UpLCB3aWR0aD1jYXAuc3osIGxpbmV3aWR0aD1iYXIuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpICsNCiAgZ2VvbV9wb2ludChzaXplPXBvaW50LnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT1sZWcudHh0LnN6KSwgDQogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT1sZWcudGl0bGUuc3opLCANCiAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG9yID0gImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249InRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnU3ltYmlvbnQgUHJvdGVpbiAoXHUwM0JDZyBjbSdeLTIqIikiKSksIGNvbG91cj1OVUxMKSsNCiAgeWxpbSgyNTAsIDU1MCkrDQogIGFubm90YXRlKCJ0ZXh0IiwgeD0yLCB5PTUzNSwgbGFiZWw9IioqIiwgc2l6ZT1zaWcuc3osIGZvbnRmYWNlPSJib2xkIik7IFRQMV9Qcm90U3ltLnBsb3QNCmBgYA0KDQoNCiMjIyMgQmlvbWFzcyBIb3N0IA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDEkQUZEV19tZy5jbTJfQykNCnNoYXBpcm8udGVzdChDb3JhbC5UUDEkQUZEV19tZy5jbTJfQykNCiNOb3JtYWwNCg0KIyNNb2RlbA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNCkJpby5DLmxtZV9UUDE8LWxtZXIoQUZEV19tZy5jbTJfQ35PcmlnaW4qU2l0ZSsoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAxKQ0KDQojI0NoZWNrIHJlc2lkdWFscw0KQmlvLkMubG1lX3Jlc19UUDEgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBCaW8uQy5sbWVfVFAxLCBwbG90ID0gRikNCnBsb3QoQmlvLkMubG1lX3Jlc19UUDEpDQoNCiMjTW9kZWwgcmVzdWx0cw0Kc3VtbWFyeShCaW8uQy5sbWVfVFAxKQ0KDQpldGFfc3F1YXJlZChCaW8uQy5sbWVfVFAxKQ0KDQojI1NhdmUgbW9kZWwgcmVzdWx0cw0KQmlvLkNfVFAxLnJlczwtZGF0YS5mcmFtZShzdW1tYXJ5KEJpby5DLmxtZV9UUDEpJGNvZWZmaWNpZW50c1stMSxdKQ0KQmlvLkNfVFAxLnJlcyRQcmVkaWN0b3I8LWMoIk9yaWdpbiIsICJTaXRlIiwgIk9yaWdpbiB4IFNpdGUiKQ0KQmlvLkNfVFAxLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChCaW8uQy5sbWVfVFAxKSRFdGEyKQ0KQmlvLkNfVFAxLnJlcyRSZXNwb25zZTwtcmVwKCJCaW9tYXNzIEhvc3QiLCBucm93KEJpby5DX1RQMS5yZXMpKQ0KDQpgYGANCg0KDQpFZmZlY3Qgc2l6ZSBvZiBPcmlnaW4gZm9yIGVhY2ggU2l0ZQ0KYGBge3J9DQojI0tMDQpCaW8uQy5sbWVfVFAxX0tMPC1sbWVyKEFGRFdfbWcuY20yX0N+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDFbd2hpY2goQ29yYWwuVFAxJFNpdGU9PSJLTCIpLF0pDQpzdW1tYXJ5KEJpby5DLmxtZV9UUDFfS0wpDQpldGFfc3F1YXJlZChCaW8uQy5sbWVfVFAxX0tMKQ0KDQojI1NTDQpCaW8uQy5sbWVfVFAxX1NTPC1sbWVyKEFGRFdfbWcuY20yX0N+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDFbd2hpY2goQ29yYWwuVFAxJFNpdGU9PSJTUyIpLF0pDQpzdW1tYXJ5KEJpby5DLmxtZV9UUDFfU1MpDQpldGFfc3F1YXJlZChCaW8uQy5sbWVfVFAxX1NTKQ0KDQojI1NhdmUgcmVzdWx0cw0KQmlvLkNfVFAxLnNpdGUucmVzPC1kYXRhLmZyYW1lKHJiaW5kKHN1bW1hcnkoQmlvLkMubG1lX1RQMV9LTCkkY29lZmZpY2llbnRzWy0xLF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkoQmlvLkMubG1lX1RQMV9TUykkY29lZmZpY2llbnRzWy0xLF0pKQ0KQmlvLkNfVFAxLnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpCaW8uQ19UUDEuc2l0ZS5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQmlvLkMubG1lX1RQMV9LTCkkRXRhMiwgZXRhX3NxdWFyZWQoQmlvLkMubG1lX1RQMV9TUykkRXRhMikNCkJpby5DX1RQMS5zaXRlLnJlcyRSZXNwb25zZTwtcmVwKCJCaW9tYXNzIEhvc3QiLCBucm93KEJpby5DX1RQMS5zaXRlLnJlcykpDQoNCiMjQ29tYmluZSByZXN1bHRzIA0KQmlvLkNfVFAxLnJlczwtcmJpbmQoQmlvLkNfVFAxLnJlcywgQmlvLkNfVFAxLnNpdGUucmVzKQ0KDQpgYGANCg0KDQpgYGB7ciBQbG90IEJpb21hc3MgSG9zdCBUUDF9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQMV9CaW9Ib3N0LnN1bTwtc3VtbWFyeVNFKENvcmFsLlRQMSwgbWVhc3VyZXZhcj0iQUZEV19tZy5jbTJfQyIsIGdyb3VwdmFycz1jKCJTaXRlIiwgIk9yaWdpbiIsICJTaXRlLk9yaWciKSwgbmEucm09VFJVRSkNCg0KIyNQbG90IEF2ZXJhZ2UgSG9zdCBCaW9tYXNzIGFjcm9zcyBUcmVhdG1lbnRzDQpUUDFfQmlvSG9zdC5wbG90PC1nZ3Bsb3QoVFAxX0Jpb0hvc3Quc3VtLCBhZXMoeD1TaXRlLCB5PUFGRFdfbWcuY20yX0MsIGNvbG91cj1TaXRlLk9yaWcpKSArIA0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1PcmlnLmNvbG9ycy5vKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1BRkRXX21nLmNtMl9DLXNlLCB5bWF4PUFGRFdfbWcuY20yX0Mrc2UpLCB3aWR0aD1jYXAuc3osIGxpbmV3aWR0aD1iYXIuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpICsNCiAgZ2VvbV9wb2ludChzaXplPXBvaW50LnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPWxlZy50eHQuc3opLCANCiAgICAgICAgbGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPWxlZy50aXRsZS5zeiksIA0KICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSAiYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSsNCiAgbGFicyh4PSJTaXRlIGFuZCBPcmlnaW4iLCB5PWV4cHJlc3Npb24ocGFzdGUoJ0hvc3QgQmlvbWFzcyAobWcgY20nXi0yKiIpIikpLCBjb2xvdXI9TlVMTCkrDQogIHlsaW0oMC44LCAxLjYpKw0KICAgYW5ub3RhdGUoInRleHQiLCB4PTEsIHk9MS4zLCBsYWJlbD0iKiIsIHNpemU9c2lnLnN6LCBmb250ZmFjZT0iYm9sZCIpOyBUUDFfQmlvSG9zdC5wbG90DQpgYGANCg0KDQoNCiMjIyMgQmlvbWFzcyBTeW1iaW9udHMgDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQMSRBRkRXX21nLmNtMl9TKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQMSRBRkRXX21nLmNtMl9TKQ0KI05vcm1hbA0KDQojI01vZGVsIA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNCkJpby5TLmxtZV9UUDE8LWxtZXIoQUZEV19tZy5jbTJfU35PcmlnaW4qU2l0ZSsoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAxKQ0KDQojI0NoZWNrIHJlc2lkdWFscw0KQmlvLlMubG1lX3Jlc19UUDEgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBCaW8uUy5sbWVfVFAxLCBwbG90ID0gRikNCnBsb3QoQmlvLlMubG1lX3Jlc19UUDEpDQoNCiMjTW9kZWwgcmVzdWx0cw0Kc3VtbWFyeShCaW8uUy5sbWVfVFAxKQ0KDQpldGFfc3F1YXJlZChCaW8uUy5sbWVfVFAxKQ0KDQojI1NhdmUgbW9kZWwgcmVzdWx0cw0KQmlvLlNfVFAxLnJlczwtZGF0YS5mcmFtZShzdW1tYXJ5KEJpby5TLmxtZV9UUDEpJGNvZWZmaWNpZW50c1stMSxdKQ0KQmlvLlNfVFAxLnJlcyRQcmVkaWN0b3I8LWMoIk9yaWdpbiIsICJTaXRlIiwgIk9yaWdpbiB4IFNpdGUiKQ0KQmlvLlNfVFAxLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChCaW8uUy5sbWVfVFAxKSRFdGEyKQ0KQmlvLlNfVFAxLnJlcyRSZXNwb25zZTwtcmVwKCJCaW9tYXNzIFN5bWJpb250IiwgbnJvdyhCaW8uU19UUDEucmVzKSkNCg0KYGBgDQoNCg0KRWZmZWN0IHNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KIyNLTA0KQmlvLlMubG1lX1RQMV9LTDwtbG1lcihBRkRXX21nLmNtMl9Tfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAxW3doaWNoKENvcmFsLlRQMSRTaXRlPT0iS0wiKSxdKQ0Kc3VtbWFyeShCaW8uUy5sbWVfVFAxX0tMKQ0KZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQMV9LTCkNCg0KDQojI1NTDQpCaW8uUy5sbWVfVFAxX1NTPC1sbWVyKEFGRFdfbWcuY20yX1N+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDFbd2hpY2goQ29yYWwuVFAxJFNpdGU9PSJTUyIpLF0pDQpzdW1tYXJ5KEJpby5TLmxtZV9UUDFfU1MpDQpldGFfc3F1YXJlZChCaW8uUy5sbWVfVFAxX1NTKQ0KDQoNCiMjU2F2ZSByZXN1bHRzDQpCaW8uU19UUDEuc2l0ZS5yZXM8LWRhdGEuZnJhbWUocmJpbmQoc3VtbWFyeShCaW8uUy5sbWVfVFAxX0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KEJpby5TLmxtZV9UUDFfU1MpJGNvZWZmaWNpZW50c1stMSxdKSkNCkJpby5TX1RQMS5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KQmlvLlNfVFAxLnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDFfS0wpJEV0YTIsIGV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDFfU1MpJEV0YTIpDQpCaW8uU19UUDEuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiQmlvbWFzcyBTeW1iaW9udCIsIG5yb3coQmlvLlNfVFAxLnNpdGUucmVzKSkNCg0KIyNDb21iaW5lIHJlc3VsdHMgDQpCaW8uU19UUDEucmVzPC1yYmluZChCaW8uU19UUDEucmVzLCBCaW8uU19UUDEuc2l0ZS5yZXMpDQoNCmBgYA0KDQoNCmBgYHtyIFBsb3QgQmlvbWFzcyBTeW1iaW9udCBUUDF9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQMV9CaW9TeW0uc3VtPC1zdW1tYXJ5U0UoQ29yYWwuVFAxLCBtZWFzdXJldmFyPSJBRkRXX21nLmNtMl9TIiwgZ3JvdXB2YXJzPWMoIlNpdGUiLCAiT3JpZ2luIiwgIlNpdGUuT3JpZyIpLCBuYS5ybT1UUlVFKQ0KDQojI1Bsb3QgQXZlcmFnZSBTeW1iaW9udCBCaW9tYXNzIGFjcm9zcyBUcmVhdG1lbnRzDQpUUDFfQmlvU3ltLnBsb3Q8LWdncGxvdChUUDFfQmlvU3ltLnN1bSwgYWVzKHg9U2l0ZSwgeT1BRkRXX21nLmNtMl9TLCBjb2xvdXI9U2l0ZS5PcmlnKSkgKyANCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9T3JpZy5jb2xvcnMubykrDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49QUZEV19tZy5jbTJfUy1zZSwgeW1heD1BRkRXX21nLmNtMl9TK3NlKSwgd2lkdGg9Y2FwLnN6LCBsaW5ld2lkdGg9YmFyLnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSArDQogIGdlb21fcG9pbnQoc2l6ZT1wb2ludC5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkrDQogIHRoZW1lX2NsYXNzaWMoKSsNCiAgdGhlbWUoYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJ0b3AiKSsNCiAgbGFicyh4PSJTaXRlIGFuZCBPcmlnaW4iLCB5PWV4cHJlc3Npb24ocGFzdGUoJ1N5bWJpb250IEJpb21hc3MgKG1nIGNtJ14tMioiKSIpKSwgY29sb3VyPU5VTEwpKw0KICB5bGltKDAuNDUsIDAuOTUpKw0KICBhbm5vdGF0ZSgidGV4dCIsIHg9MiwgeT0wLjgsIGxhYmVsPSIqKiIsIHNpemU9c2lnLnN6LCBmb250ZmFjZT0iYm9sZCIpOyBUUDFfQmlvU3ltLnBsb3QNCmBgYA0KDQoNCiMjIyMgQ2hsb3JvcGh5bGwNCmBgYHtyfQ0KIyNDaGVjayBub3JtYWxpdHkNCmhpc3QoQ29yYWwuVFAxJENobF91Zy5jbTIpDQpzaGFwaXJvLnRlc3QoQ29yYWwuVFAxJENobF91Zy5jbTIpDQojTm9ybWFsDQoNCiMjTW9kZWwNCiNGdW5jdGlvbiBvZiBTaXRlIGFuZCBPcmlnaW4sIHdpdGggR2Vub3R5cGUgYXMgYSBSYW5kb20gZWZmZWN0DQojSW50ZXJhY3Rpb25zIGJldHdlZW4gT3JpZ2luIGFuZCBTaXRlDQpDaGwubG1lX1RQMTwtbG1lcihDaGxfdWcuY20yfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDEpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpDaGwubG1lX3Jlc19UUDEgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBDaGwubG1lX1RQMSwgcGxvdCA9IEYpDQpwbG90KENobC5sbWVfcmVzX1RQMSkNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KENobC5sbWVfVFAxKQ0KDQpldGFfc3F1YXJlZChDaGwubG1lX1RQMSkNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNCkNobF9UUDEucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoQ2hsLmxtZV9UUDEpJGNvZWZmaWNpZW50c1stMSxdKQ0KQ2hsX1RQMS5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNCkNobF9UUDEucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKENobC5sbWVfVFAxKSRFdGEyKQ0KQ2hsX1RQMS5yZXMkUmVzcG9uc2U8LXJlcCgiQ2hsb3JvcGh5bGwiLCBucm93KENobF9UUDEucmVzKSkNCg0KYGBgDQoNCg0KRWZmZWN0IHNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KIyNLTA0KQ2hsLmxtZV9UUDFfS0w8LWxtZXIoQ2hsX3VnLmNtMn5PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMVt3aGljaChDb3JhbC5UUDEkU2l0ZT09IktMIiksXSkNCnN1bW1hcnkoQ2hsLmxtZV9UUDFfS0wpDQpldGFfc3F1YXJlZChDaGwubG1lX1RQMV9LTCkNCg0KIyNTUw0KQ2hsLmxtZV9UUDFfU1M8LWxtZXIoQ2hsX3VnLmNtMn5PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMVt3aGljaChDb3JhbC5UUDEkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoQ2hsLmxtZV9UUDFfU1MpDQpldGFfc3F1YXJlZChDaGwubG1lX1RQMV9TUykNCg0KIyNTYXZlIHJlc3VsdHMNCkNobF9UUDEuc2l0ZS5yZXM8LWRhdGEuZnJhbWUocmJpbmQoc3VtbWFyeShDaGwubG1lX1RQMV9LTCkkY29lZmZpY2llbnRzWy0xLF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeShDaGwubG1lX1RQMV9TUykkY29lZmZpY2llbnRzWy0xLF0pKQ0KQ2hsX1RQMS5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KQ2hsX1RQMS5zaXRlLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChDaGwubG1lX1RQMV9LTCkkRXRhMiwgZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDFfU1MpJEV0YTIpDQpDaGxfVFAxLnNpdGUucmVzJFJlc3BvbnNlPC1yZXAoIkNobG9yb3BoeWxsIiwgbnJvdyhDaGxfVFAxLnNpdGUucmVzKSkNCg0KIyNDb21iaW5lIHJlc3VsdHMgDQpDaGxfVFAxLnJlczwtcmJpbmQoQ2hsX1RQMS5yZXMsIENobF9UUDEuc2l0ZS5yZXMpDQoNCmBgYA0KDQoNCmBgYHtyIFBsb3QgQ2hsb3JvcGh5bGwgVFAxfQ0KIyNTdW1tYXJ5IHN0YXRpc3RpY3MgYnkgU2l0ZSBhbmQgT3JpZ2luDQpUUDFfQ2hsLnN1bTwtc3VtbWFyeVNFKENvcmFsLlRQMSwgbWVhc3VyZXZhcj0iQ2hsX3VnLmNtMiIsIGdyb3VwdmFycz1jKCJTaXRlIiwgIk9yaWdpbiIsICJTaXRlLk9yaWciKSwgbmEucm09VFJVRSkNCg0KIyNQbG90IEF2ZXJhZ2UgQ2hsb3JvcGh5bGwgYWNyb3NzIFRyZWF0bWVudHMNClRQMV9DaGwucGxvdDwtZ2dwbG90KFRQMV9DaGwuc3VtLCBhZXMoeD1TaXRlLCB5PUNobF91Zy5jbTIsIGNvbG91cj1TaXRlLk9yaWcpKSArIA0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1PcmlnLmNvbG9ycy5vKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1DaGxfdWcuY20yLXNlLCB5bWF4PUNobF91Zy5jbTIrc2UpLCB3aWR0aD1jYXAuc3osIGxpbmV3aWR0aD1iYXIuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpICsNCiAgZ2VvbV9wb2ludChzaXplPXBvaW50LnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT1sZWcudHh0LnN6KSwgDQogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT1sZWcudGl0bGUuc3opLCANCiAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG9yID0gImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249InRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnVG90YWwgQ2hsb3JvcGh5bGwgKFx1MDNCQ2cgY20nXi0yKiIpIikpLCBjb2xvdXI9TlVMTCkrDQogIHlsaW0oMC41LCAzLjI1KSsNCiAgYW5ub3RhdGUoInRleHQiLCB4PTIsIHk9MS43LCBsYWJlbD0iKioqIiwgc2l6ZT1zaWcuc3osIGZvbnRmYWNlPSJib2xkIik7IFRQMV9DaGwucGxvdA0KYGBgDQoNCg0KIyMjIyBTYXZlIFJlc3VsdHMNCmBgYHtyfQ0KIyNDb21iaW5lIFJlc3VsdHMNClBoeXNfVDEucmVzPC1yYmluZChQcm90LkNfVFAxLnJlcywgUHJvdC5TX1RQMS5yZXMsIEJpby5DX1RQMS5yZXMsIEJpby5TX1RQMS5yZXMsIENobF9UUDEucmVzKQ0KDQojI0FkZCBUaW1lcG9pbnQNClBoeXNfVDEucmVzJFRpbWVQPC1yZXAoIlQxIiwgbnJvdyhQaHlzX1QxLnJlcykpDQoNCmBgYA0KDQoNCiMjIyBUUDINCg0KYGBge3J9DQojI1N1YnNldCBUaW1lcG9pbnQgMiANCkNvcmFsLlRQMjwtc3Vic2V0KENvcmFsLnJtLCBUaW1lUD09IlRQMiIpDQoNCmBgYA0KDQoNCiMjIyMgUHJvdGVpbiBIb3N0IA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDIkVFBfdWcuY20yX0MpDQpzaGFwaXJvLnRlc3QoQ29yYWwuVFAyJFRQX3VnLmNtMl9DKQ0KI05vcm1hbA0KDQojI01vZGVsIA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNClByb3QuQy5sbWVfVFAyPC1sbWVyKFRQX3VnLmNtMl9Dfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDIpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpQcm90LkMubG1lX3Jlc19UUDIgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBQcm90LkMubG1lX1RQMiwgcGxvdCA9IEYpDQpwbG90KFByb3QuQy5sbWVfcmVzX1RQMikNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KFByb3QuQy5sbWVfVFAyKQ0KDQpldGFfc3F1YXJlZChQcm90LkMubG1lX1RQMikNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNClByb3QuQ19UUDIucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoUHJvdC5DLmxtZV9UUDIpJGNvZWZmaWNpZW50c1stMSxdKQ0KUHJvdC5DX1RQMi5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNClByb3QuQ19UUDIucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuQy5sbWVfVFAyKSRFdGEyKQ0KUHJvdC5DX1RQMi5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBIb3N0IiwgbnJvdyhQcm90LkNfVFAyLnJlcykpDQoNCmBgYA0KDQoNCiMjIyMgUHJvdGVpbiBTeW1iaW9udCANCmBgYHtyfQ0KIyNDaGVjayBub3JtYWxpdHkNCmhpc3QoQ29yYWwuVFAyJFRQX3VnLmNtMl9TKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQMiRUUF91Zy5jbTJfUykNCiNOb3JtYWwNCg0KIyNNb2RlbA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNClByb3QuUy5sbWVfVFAyPC1sbWVyKFRQX3VnLmNtMl9Tfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDIpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpQcm90LlMubG1lX3Jlc19UUDIgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBQcm90LlMubG1lX1RQMiwgcGxvdCA9IEYpDQpwbG90KFByb3QuUy5sbWVfcmVzX1RQMikNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KFByb3QuUy5sbWVfVFAyKQ0KDQpldGFfc3F1YXJlZChQcm90LlMubG1lX1RQMikNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNClByb3QuU19UUDIucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoUHJvdC5TLmxtZV9UUDIpJGNvZWZmaWNpZW50c1stMSxdKQ0KUHJvdC5TX1RQMi5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNClByb3QuU19UUDIucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFAyKSRFdGEyKQ0KUHJvdC5TX1RQMi5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBTeW1iaW9udCIsIG5yb3coUHJvdC5TX1RQMi5yZXMpKQ0KDQpgYGANCg0KRWZmZWN0IHNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KIyNLTA0KUHJvdC5TLmxtZV9UUDJfS0w8LWxtZXIoVFBfdWcuY20yX1N+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDJbd2hpY2goQ29yYWwuVFAyJFNpdGU9PSJLTCIpLF0pDQpzdW1tYXJ5KFByb3QuUy5sbWVfVFAyX0tMKQ0KZXRhX3NxdWFyZWQoUHJvdC5TLmxtZV9UUDJfS0wpDQoNCiMjU1MNClByb3QuUy5sbWVfVFAyX1NTPC1sbWVyKFRQX3VnLmNtMl9Tfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAyW3doaWNoKENvcmFsLlRQMiRTaXRlPT0iU1MiKSxdKQ0Kc3VtbWFyeShQcm90LlMubG1lX1RQMl9TUykNCmV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFAyX1NTKQ0KDQojI1NhdmUgcmVzdWx0cw0KUHJvdC5TX1RQMi5zaXRlLnJlczwtZGF0YS5mcmFtZShyYmluZChzdW1tYXJ5KFByb3QuUy5sbWVfVFAyX0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KFByb3QuUy5sbWVfVFAyX1NTKSRjb2VmZmljaWVudHNbLTEsXSkpDQpQcm90LlNfVFAyLnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpQcm90LlNfVFAyLnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFAyX0tMKSRFdGEyLCBldGFfc3F1YXJlZChQcm90LlMubG1lX1RQMl9TUykkRXRhMikNClByb3QuU19UUDIuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBTeW1iaW9udCIsIG5yb3coUHJvdC5TX1RQMi5zaXRlLnJlcykpDQoNCiMjQ29tYmluZSByZXN1bHRzIA0KUHJvdC5TX1RQMi5yZXM8LXJiaW5kKFByb3QuU19UUDIucmVzLCBQcm90LlNfVFAyLnNpdGUucmVzKQ0KDQpgYGANCg0KDQoNCmBgYHtyIFBsb3QgUHJvdGVpbiBTeW1iaW9udCBUUDJ9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQMl9Qcm90U3ltLnN1bTwtc3VtbWFyeVNFKENvcmFsLlRQMiwgbWVhc3VyZXZhcj0iVFBfdWcuY20yX1MiLCBncm91cHZhcnM9YygiU2l0ZSIsICJPcmlnaW4iLCAiU2l0ZS5PcmlnIiksIG5hLnJtPVRSVUUpDQoNCiMjUGxvdCBBdmVyYWdlIFN5bWJpb250IFByb3RlaW4gYWNyb3NzIFRyZWF0bWVudHMNClRQMl9Qcm90U3ltLnBsb3Q8LWdncGxvdChUUDJfUHJvdFN5bS5zdW0sIGFlcyh4PVNpdGUsIHk9VFBfdWcuY20yX1MsIGNvbG91cj1TaXRlLk9yaWcpKSArIA0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1PcmlnLmNvbG9ycy5vKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1UUF91Zy5jbTJfUy1zZSwgeW1heD1UUF91Zy5jbTJfUytzZSksIHdpZHRoPWNhcC5zeiwgbGluZXdpZHRoPWJhci5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkgKw0KICBnZW9tX3BvaW50KHNpemU9cG9pbnQuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpKw0KICB0aGVtZV9jbGFzc2ljKCkrDQogIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPWxlZy50eHQuc3opLCANCiAgICAgICAgbGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPWxlZy50aXRsZS5zeiksIA0KICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSAiYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0idG9wIikrDQogIGxhYnMoeD0iU2l0ZSBhbmQgT3JpZ2luIiwgeT1leHByZXNzaW9uKHBhc3RlKCdTeW1iaW9udCBQcm90ZWluIChcdTAzQkNnIGNtJ14tMioiKSIpKSwgY29sb3VyPU5VTEwpKw0KICB5bGltKDI1MCwgNTUwKTsgVFAyX1Byb3RTeW0ucGxvdA0KYGBgDQoNCg0KIyMjIyBCaW9tYXNzIEhvc3QgDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQMiRBRkRXX21nLmNtMl9DKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQMiRBRkRXX21nLmNtMl9DKQ0KI05vcm1hbA0KDQojI01vZGVsDQojRnVuY3Rpb24gb2YgU2l0ZSBhbmQgT3JpZ2luLCB3aXRoIEdlbm90eXBlIGFzIGEgUmFuZG9tIGVmZmVjdA0KI0ludGVyYWN0aW9ucyBiZXR3ZWVuIE9yaWdpbiBhbmQgU2l0ZQ0KQmlvLkMubG1lX1RQMjwtbG1lcihBRkRXX21nLmNtMl9Dfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDIpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpCaW8uQy5sbWVfcmVzX1RQMiA8LSBzaW11bGF0ZVJlc2lkdWFscyhmaXR0ZWRNb2RlbCA9IEJpby5DLmxtZV9UUDIsIHBsb3QgPSBGKQ0KcGxvdChCaW8uQy5sbWVfcmVzX1RQMikNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KEJpby5DLmxtZV9UUDIpDQoNCmV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDIpDQoNCiMjU2F2ZSBtb2RlbCByZXN1bHRzDQpCaW8uQ19UUDIucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoQmlvLkMubG1lX1RQMikkY29lZmZpY2llbnRzWy0xLF0pDQpCaW8uQ19UUDIucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpCaW8uQ19UUDIucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDIpJEV0YTIpDQpCaW8uQ19UUDIucmVzJFJlc3BvbnNlPC1yZXAoIkJpb21hc3MgSG9zdCIsIG5yb3coQmlvLkNfVFAyLnJlcykpDQoNCmBgYA0KDQoNCkVmZmVjdCBzaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCiMjS0wNCkJpby5DLmxtZV9UUDJfS0w8LWxtZXIoQUZEV19tZy5jbTJfQ35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMlt3aGljaChDb3JhbC5UUDIkU2l0ZT09IktMIiksXSkNCnN1bW1hcnkoQmlvLkMubG1lX1RQMl9LTCkNCmV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDJfS0wpDQoNCiMjU1MNCkJpby5DLmxtZV9UUDJfU1M8LWxtZXIoQUZEV19tZy5jbTJfQ35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMlt3aGljaChDb3JhbC5UUDIkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoQmlvLkMubG1lX1RQMl9TUykNCmV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDJfU1MpDQoNCiMjU2F2ZSByZXN1bHRzDQpCaW8uQ19UUDIuc2l0ZS5yZXM8LWRhdGEuZnJhbWUocmJpbmQoc3VtbWFyeShCaW8uQy5sbWVfVFAyX0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KEJpby5DLmxtZV9UUDJfU1MpJGNvZWZmaWNpZW50c1stMSxdKSkNCkJpby5DX1RQMi5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KQmlvLkNfVFAyLnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDJfS0wpJEV0YTIsIGV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDJfU1MpJEV0YTIpDQpCaW8uQ19UUDIuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiQmlvbWFzcyBIb3N0IiwgbnJvdyhCaW8uQ19UUDIuc2l0ZS5yZXMpKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANCkJpby5DX1RQMi5yZXM8LXJiaW5kKEJpby5DX1RQMi5yZXMsIEJpby5DX1RQMi5zaXRlLnJlcykNCg0KYGBgDQoNCg0KYGBge3IgUGxvdCBCaW9tYXNzIEhvc3QgVFAyfQ0KIyNTdW1tYXJ5IHN0YXRpc3RpY3MgYnkgU2l0ZSBhbmQgT3JpZ2luDQpUUDJfQmlvSG9zdC5zdW08LXN1bW1hcnlTRShDb3JhbC5UUDIsIG1lYXN1cmV2YXI9IkFGRFdfbWcuY20yX0MiLCBncm91cHZhcnM9YygiU2l0ZSIsICJPcmlnaW4iLCAiU2l0ZS5PcmlnIiksIG5hLnJtPVRSVUUpDQoNCiMjUGxvdCBBdmVyYWdlIEhvc3QgQmlvbWFzcyBhY3Jvc3MgVHJlYXRtZW50cw0KVFAyX0Jpb0hvc3QucGxvdDwtZ2dwbG90KFRQMl9CaW9Ib3N0LnN1bSwgYWVzKHg9U2l0ZSwgeT1BRkRXX21nLmNtMl9DLCBjb2xvdXI9U2l0ZS5PcmlnKSkgKyANCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9T3JpZy5jb2xvcnMubykrDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49QUZEV19tZy5jbTJfQy1zZSwgeW1heD1BRkRXX21nLmNtMl9DK3NlKSwgd2lkdGg9Y2FwLnN6LCBsaW5ld2lkdGg9YmFyLnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSArDQogIGdlb21fcG9pbnQoc2l6ZT1wb2ludC5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkrDQogIHRoZW1lX2NsYXNzaWMoKSsNCiAgdGhlbWUoYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJ0b3AiKSsNCiAgbGFicyh4PSJTaXRlIGFuZCBPcmlnaW4iLCB5PWV4cHJlc3Npb24ocGFzdGUoJ0hvc3QgQmlvbWFzcyAobWcgY20nXi0yKiIpIikpLCBjb2xvdXI9TlVMTCkrDQogIHlsaW0oMC44LCAxLjYpKw0KICBhbm5vdGF0ZSgidGV4dCIsIHg9MiwgeT0xLjM1LCBsYWJlbD0iLSIsIHNpemU9bGV2ZWxzLnN6LCBmb250ZmFjZT0iYm9sZCIpOyBUUDJfQmlvSG9zdC5wbG90DQpgYGANCg0KDQojIyMjIEJpb21hc3MgU3ltYmlvbnRzIA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDIkQUZEV19tZy5jbTJfUykNCnNoYXBpcm8udGVzdChDb3JhbC5UUDIkQUZEV19tZy5jbTJfUykNCiNOb3JtYWwNCg0KIyNNb2RlbCANCiNGdW5jdGlvbiBvZiBTaXRlIGFuZCBPcmlnaW4sIHdpdGggR2Vub3R5cGUgYXMgYSBSYW5kb20gZWZmZWN0DQojSW50ZXJhY3Rpb25zIGJldHdlZW4gT3JpZ2luIGFuZCBTaXRlDQpCaW8uUy5sbWVfVFAyPC1sbWVyKEFGRFdfbWcuY20yX1N+T3JpZ2luKlNpdGUrKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMikNCg0KIyNDaGVjayByZXNpZHVhbHMNCkJpby5TLmxtZV9yZXNfVFAyIDwtIHNpbXVsYXRlUmVzaWR1YWxzKGZpdHRlZE1vZGVsID0gQmlvLlMubG1lX1RQMiwgcGxvdCA9IEYpDQpwbG90KEJpby5TLmxtZV9yZXNfVFAyKQ0KDQojI01vZGVsIHJlc3VsdHMNCnN1bW1hcnkoQmlvLlMubG1lX1RQMikNCg0KZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQMikNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNCkJpby5TX1RQMi5yZXM8LWRhdGEuZnJhbWUoc3VtbWFyeShCaW8uUy5sbWVfVFAyKSRjb2VmZmljaWVudHNbLTEsXSkNCkJpby5TX1RQMi5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNCkJpby5TX1RQMi5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQMikkRXRhMikNCkJpby5TX1RQMi5yZXMkUmVzcG9uc2U8LXJlcCgiQmlvbWFzcyBTeW1iaW9udCIsIG5yb3coQmlvLlNfVFAyLnJlcykpDQoNCmBgYA0KDQoNCkVmZmVjdCBzaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCiMjS0wNCkJpby5TLmxtZV9UUDJfS0w8LWxtZXIoQUZEV19tZy5jbTJfU35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMlt3aGljaChDb3JhbC5UUDIkU2l0ZT09IktMIiksXSkNCnN1bW1hcnkoQmlvLlMubG1lX1RQMl9LTCkNCmV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDJfS0wpDQoNCiMjU1MNCkJpby5TLmxtZV9UUDJfU1M8LWxtZXIoQUZEV19tZy5jbTJfU35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMlt3aGljaChDb3JhbC5UUDIkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoQmlvLlMubG1lX1RQMl9TUykNCmV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDJfU1MpDQoNCiMjU2F2ZSByZXN1bHRzDQpCaW8uU19UUDIuc2l0ZS5yZXM8LWRhdGEuZnJhbWUocmJpbmQoc3VtbWFyeShCaW8uUy5sbWVfVFAyX0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KEJpby5TLmxtZV9UUDJfU1MpJGNvZWZmaWNpZW50c1stMSxdKSkNCkJpby5TX1RQMi5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KQmlvLlNfVFAyLnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDJfS0wpJEV0YTIsIGV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDJfU1MpJEV0YTIpDQpCaW8uU19UUDIuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiQmlvbWFzcyBTeW1iaW9udCIsIG5yb3coQmlvLlNfVFAyLnNpdGUucmVzKSkNCg0KIyNDb21iaW5lIHJlc3VsdHMgDQpCaW8uU19UUDIucmVzPC1yYmluZChCaW8uU19UUDIucmVzLCBCaW8uU19UUDIuc2l0ZS5yZXMpDQoNCmBgYA0KDQoNCmBgYHtyIFBsb3QgQmlvbWFzcyBTeW1iaW9udCBUUDJ9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQMl9CaW9TeW0uc3VtPC1zdW1tYXJ5U0UoQ29yYWwuVFAyLCBtZWFzdXJldmFyPSJBRkRXX21nLmNtMl9TIiwgZ3JvdXB2YXJzPWMoIlNpdGUiLCAiT3JpZ2luIiwgIlNpdGUuT3JpZyIpLCBuYS5ybT1UUlVFKQ0KDQojI1Bsb3QgQXZlcmFnZSBTeW1iaW9udCBCaW9tYXNzIGFjcm9zcyBUcmVhdG1lbnRzDQpUUDJfQmlvU3ltLnBsb3Q8LWdncGxvdChUUDJfQmlvU3ltLnN1bSwgYWVzKHg9U2l0ZSwgeT1BRkRXX21nLmNtMl9TLCBjb2xvdXI9U2l0ZS5PcmlnKSkgKyANCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9T3JpZy5jb2xvcnMubykrDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49QUZEV19tZy5jbTJfUy1zZSwgeW1heD1BRkRXX21nLmNtMl9TK3NlKSwgd2lkdGg9Y2FwLnN6LCBsaW5ld2lkdGg9YmFyLnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSArDQogIGdlb21fcG9pbnQoc2l6ZT1wb2ludC5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkrDQogIHRoZW1lX2NsYXNzaWMoKSsNCiAgdGhlbWUoYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSAidG9wIikrDQogIGxhYnMoeD0iU2l0ZSBhbmQgT3JpZ2luIiwgeT1leHByZXNzaW9uKHBhc3RlKCdTeW1iaW9udCBCaW9tYXNzIChtZyBjbSdeLTIqIikiKSksIGNvbG91cj1OVUxMKSsNCiAgeWxpbSgwLjQ1LCAwLjk1KSsNCiAgYW5ub3RhdGUoInRleHQiLCB4PTEsIHk9MC43OCwgbGFiZWw9IioiLCBzaXplPXNpZy5zeiwgZm9udGZhY2U9ImJvbGQiKTsgVFAyX0Jpb1N5bS5wbG90DQpgYGANCg0KDQojIyMjIENobG9yb3BoeWxsDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQMiRDaGxfdWcuY20yKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQMiRDaGxfdWcuY20yKQ0KI05vcm1hbA0KDQojI01vZGVsDQojRnVuY3Rpb24gb2YgU2l0ZSBhbmQgT3JpZ2luLCB3aXRoIEdlbm90eXBlIGFzIGEgUmFuZG9tIGVmZmVjdA0KI0ludGVyYWN0aW9ucyBiZXR3ZWVuIE9yaWdpbiBhbmQgU2l0ZQ0KQ2hsLmxtZV9UUDI8LWxtZXIoQ2hsX3VnLmNtMn5PcmlnaW4qU2l0ZSsoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAyKQ0KDQojI0NoZWNrIHJlc2lkdWFscw0KQ2hsLmxtZV9yZXNfVFAyIDwtIHNpbXVsYXRlUmVzaWR1YWxzKGZpdHRlZE1vZGVsID0gQ2hsLmxtZV9UUDIsIHBsb3QgPSBGKQ0KcGxvdChDaGwubG1lX3Jlc19UUDIpDQoNCiMjTW9kZWwgcmVzdWx0cw0Kc3VtbWFyeShDaGwubG1lX1RQMikNCg0KZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDIpDQoNCiMjU2F2ZSBtb2RlbCByZXN1bHRzDQpDaGxfVFAyLnJlczwtZGF0YS5mcmFtZShzdW1tYXJ5KENobC5sbWVfVFAyKSRjb2VmZmljaWVudHNbLTEsXSkNCkNobF9UUDIucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpDaGxfVFAyLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChDaGwubG1lX1RQMikkRXRhMikNCkNobF9UUDIucmVzJFJlc3BvbnNlPC1yZXAoIkNobG9yb3BoeWxsIiwgbnJvdyhDaGxfVFAyLnJlcykpDQoNCmBgYA0KDQoNCkVmZmVjdCBzaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCiMjS0wNCkNobC5sbWVfVFAyX0tMPC1sbWVyKENobF91Zy5jbTJ+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDJbd2hpY2goQ29yYWwuVFAyJFNpdGU9PSJLTCIpLF0pDQpzdW1tYXJ5KENobC5sbWVfVFAyX0tMKQ0KZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDJfS0wpDQoNCg0KIyNTUw0KQ2hsLmxtZV9UUDJfU1M8LWxtZXIoQ2hsX3VnLmNtMn5PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMlt3aGljaChDb3JhbC5UUDIkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoQ2hsLmxtZV9UUDJfU1MpDQpldGFfc3F1YXJlZChDaGwubG1lX1RQMl9TUykNCg0KDQojI1NhdmUgcmVzdWx0cw0KQ2hsX1RQMi5zaXRlLnJlczwtZGF0YS5mcmFtZShyYmluZChzdW1tYXJ5KENobC5sbWVfVFAyX0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KENobC5sbWVfVFAyX1NTKSRjb2VmZmljaWVudHNbLTEsXSkpDQpDaGxfVFAyLnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpDaGxfVFAyLnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKENobC5sbWVfVFAyX0tMKSRFdGEyLCBldGFfc3F1YXJlZChDaGwubG1lX1RQMl9TUykkRXRhMikNCkNobF9UUDIuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiQ2hsb3JvcGh5bGwiLCBucm93KENobF9UUDIuc2l0ZS5yZXMpKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANCkNobF9UUDIucmVzPC1yYmluZChDaGxfVFAyLnJlcywgQ2hsX1RQMi5zaXRlLnJlcykNCg0KYGBgDQoNCg0KYGBge3IgUGxvdCBDaGxvcm9waHlsbCBUUDJ9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQMl9DaGwuc3VtPC1zdW1tYXJ5U0UoQ29yYWwuVFAyLCBtZWFzdXJldmFyPSJDaGxfdWcuY20yIiwgZ3JvdXB2YXJzPWMoIlNpdGUiLCAiT3JpZ2luIiwgIlNpdGUuT3JpZyIpLCBuYS5ybT1UUlVFKQ0KDQojI1Bsb3QgQXZlcmFnZSBDaGxvcm9waHlsbCBhY3Jvc3MgVHJlYXRtZW50cw0KVFAyX0NobC5wbG90PC1nZ3Bsb3QoVFAyX0NobC5zdW0sIGFlcyh4PVNpdGUsIHk9Q2hsX3VnLmNtMiwgY29sb3VyPVNpdGUuT3JpZykpICsgDQogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPU9yaWcuY29sb3JzLm8pKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUNobF91Zy5jbTItc2UsIHltYXg9Q2hsX3VnLmNtMitzZSksIHdpZHRoPWNhcC5zeiwgbGluZXdpZHRoPWJhci5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkgKw0KICBnZW9tX3BvaW50KHNpemU9cG9pbnQuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpKw0KICB0aGVtZV9jbGFzc2ljKCkrDQogIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPWxlZy50eHQuc3opLCANCiAgICAgICAgbGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPWxlZy50aXRsZS5zeiksIA0KICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSAiYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0gInRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnVG90YWwgQ2hsb3JvcGh5bGwgKFx1MDNCQ2cgY20nXi0yKiIpIikpLCBjb2xvdXI9TlVMTCkrDQogIHlsaW0oMC41LCAzLjI1KSsNCiAgYW5ub3RhdGUoInRleHQiLCB4PWMoMSwyKSwgeT1jKDEuNSwgMi42KSwgbGFiZWw9IioiLCBzaXplPXNpZy5zeiwgZm9udGZhY2U9ImJvbGQiKTsgVFAyX0NobC5wbG90DQpgYGANCg0KDQojIyMjIFNhdmUgUmVzdWx0cw0KYGBge3J9DQojI0NvbWJpbmUgUmVzdWx0cw0KUGh5c19UMi5yZXM8LXJiaW5kKFByb3QuQ19UUDIucmVzLCBQcm90LlNfVFAyLnJlcywgQmlvLkNfVFAyLnJlcywgQmlvLlNfVFAyLnJlcywgQ2hsX1RQMi5yZXMpDQoNCiMjQWRkIFRpbWVwb2ludA0KUGh5c19UMi5yZXMkVGltZVA8LXJlcCgiVDIiLCBucm93KFBoeXNfVDIucmVzKSkNCg0KYGBgDQoNCg0KIyMjIFRQMw0KDQpgYGB7cn0NCiMjU3Vic2V0IFRpbWVwb2ludCAzIA0KQ29yYWwuVFAzPC1zdWJzZXQoQ29yYWwucm0sIFRpbWVQPT0iVFAzIikNCg0KYGBgDQoNCg0KIyMjIyBQcm90ZWluIEhvc3QgDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQMyRUUF91Zy5jbTJfQykNCnNoYXBpcm8udGVzdChDb3JhbC5UUDMkVFBfdWcuY20yX0MpDQojTm9ybWFsDQoNCiMjTW9kZWwgDQojRnVuY3Rpb24gb2YgU2l0ZSBhbmQgT3JpZ2luLCB3aXRoIEdlbm90eXBlIGFzIGEgUmFuZG9tIGVmZmVjdA0KI0ludGVyYWN0aW9ucyBiZXR3ZWVuIE9yaWdpbiBhbmQgU2l0ZQ0KUHJvdC5DLmxtZV9UUDM8LWxtZXIoVFBfdWcuY20yX0N+T3JpZ2luKlNpdGUrKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMykNCg0KIyNDaGVjayByZXNpZHVhbHMNClByb3QuQy5sbWVfcmVzX1RQMyA8LSBzaW11bGF0ZVJlc2lkdWFscyhmaXR0ZWRNb2RlbCA9IFByb3QuQy5sbWVfVFAzLCBwbG90ID0gRikNCnBsb3QoUHJvdC5DLmxtZV9yZXNfVFAzKQ0KDQojI01vZGVsIHJlc3VsdHMNCnN1bW1hcnkoUHJvdC5DLmxtZV9UUDMpDQoNCmV0YV9zcXVhcmVkKFByb3QuQy5sbWVfVFAzKQ0KDQojI1NhdmUgbW9kZWwgcmVzdWx0cw0KUHJvdC5DX1RQMy5yZXM8LWRhdGEuZnJhbWUoc3VtbWFyeShQcm90LkMubG1lX1RQMykkY29lZmZpY2llbnRzWy0xLF0pDQpQcm90LkNfVFAzLnJlcyRQcmVkaWN0b3I8LWMoIk9yaWdpbiIsICJTaXRlIiwgIk9yaWdpbiB4IFNpdGUiKQ0KUHJvdC5DX1RQMy5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoUHJvdC5DLmxtZV9UUDMpJEV0YTIpDQpQcm90LkNfVFAzLnJlcyRSZXNwb25zZTwtcmVwKCJQcm90ZWluIEhvc3QiLCBucm93KFByb3QuQ19UUDMucmVzKSkNCg0KYGBgDQoNCg0KIyMjIyBQcm90ZWluIFN5bWJpb250IA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDMkVFBfdWcuY20yX1MpDQpzaGFwaXJvLnRlc3QoQ29yYWwuVFAzJFRQX3VnLmNtMl9TKQ0KI05vcm1hbA0KDQojI01vZGVsDQojRnVuY3Rpb24gb2YgU2l0ZSBhbmQgT3JpZ2luLCB3aXRoIEdlbm90eXBlIGFzIGEgUmFuZG9tIGVmZmVjdA0KI0ludGVyYWN0aW9ucyBiZXR3ZWVuIE9yaWdpbiBhbmQgU2l0ZQ0KUHJvdC5TLmxtZV9UUDM8LWxtZXIoVFBfdWcuY20yX1N+T3JpZ2luKlNpdGUrKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMykNCg0KIyNDaGVjayByZXNpZHVhbHMNClByb3QuUy5sbWVfcmVzX1RQMyA8LSBzaW11bGF0ZVJlc2lkdWFscyhmaXR0ZWRNb2RlbCA9IFByb3QuUy5sbWVfVFAzLCBwbG90ID0gRikNCnBsb3QoUHJvdC5TLmxtZV9yZXNfVFAzKQ0KDQojI01vZGVsIHJlc3VsdHMNCnN1bW1hcnkoUHJvdC5TLmxtZV9UUDMpDQoNCmV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFAzKQ0KDQojI1NhdmUgbW9kZWwgcmVzdWx0cw0KUHJvdC5TX1RQMy5yZXM8LWRhdGEuZnJhbWUoc3VtbWFyeShQcm90LlMubG1lX1RQMykkY29lZmZpY2llbnRzWy0xLF0pDQpQcm90LlNfVFAzLnJlcyRQcmVkaWN0b3I8LWMoIk9yaWdpbiIsICJTaXRlIiwgIk9yaWdpbiB4IFNpdGUiKQ0KUHJvdC5TX1RQMy5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoUHJvdC5TLmxtZV9UUDMpJEV0YTIpDQpQcm90LlNfVFAzLnJlcyRSZXNwb25zZTwtcmVwKCJQcm90ZWluIFN5bWJpb250IiwgbnJvdyhQcm90LlNfVFAzLnJlcykpDQoNCmBgYA0KDQpFZmZlY3Qgc2l6ZSBvZiBPcmlnaW4gZm9yIGVhY2ggU2l0ZQ0KYGBge3J9DQojI0tMDQpQcm90LlMubG1lX1RQM19LTDwtbG1lcihUUF91Zy5jbTJfU35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQM1t3aGljaChDb3JhbC5UUDMkU2l0ZT09IktMIiksXSkNCnN1bW1hcnkoUHJvdC5TLmxtZV9UUDNfS0wpDQpldGFfc3F1YXJlZChQcm90LlMubG1lX1RQM19LTCkNCg0KDQojI1NTDQpQcm90LlMubG1lX1RQM19TUzwtbG1lcihUUF91Zy5jbTJfU35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQM1t3aGljaChDb3JhbC5UUDMkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoUHJvdC5TLmxtZV9UUDNfU1MpDQpldGFfc3F1YXJlZChQcm90LlMubG1lX1RQM19TUykNCg0KIyNTYXZlIHJlc3VsdHMNClByb3QuU19UUDMuc2l0ZS5yZXM8LWRhdGEuZnJhbWUocmJpbmQoc3VtbWFyeShQcm90LlMubG1lX1RQM19LTCkkY29lZmZpY2llbnRzWy0xLF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeShQcm90LlMubG1lX1RQM19TUykkY29lZmZpY2llbnRzWy0xLF0pKQ0KUHJvdC5TX1RQMy5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KUHJvdC5TX1RQMy5zaXRlLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChQcm90LlMubG1lX1RQM19LTCkkRXRhMiwgZXRhX3NxdWFyZWQoUHJvdC5TLmxtZV9UUDNfU1MpJEV0YTIpDQpQcm90LlNfVFAzLnNpdGUucmVzJFJlc3BvbnNlPC1yZXAoIlByb3RlaW4gU3ltYmlvbnQiLCBucm93KFByb3QuU19UUDMuc2l0ZS5yZXMpKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANClByb3QuU19UUDMucmVzPC1yYmluZChQcm90LlNfVFAzLnJlcywgUHJvdC5TX1RQMy5zaXRlLnJlcykNCg0KYGBgDQoNCg0KDQpgYGB7ciBQbG90IFByb3RlaW4gU3ltYmlvbnQgVFAzfQ0KIyNTdW1tYXJ5IHN0YXRpc3RpY3MgYnkgU2l0ZSBhbmQgT3JpZ2luDQpUUDNfUHJvdFN5bS5zdW08LXN1bW1hcnlTRShDb3JhbC5UUDMsIG1lYXN1cmV2YXI9IlRQX3VnLmNtMl9TIiwgZ3JvdXB2YXJzPWMoIlNpdGUiLCAiT3JpZ2luIiwgIlNpdGUuT3JpZyIpLCBuYS5ybT1UUlVFKQ0KDQojI1Bsb3QgQXZlcmFnZSBTeW1iaW9udCBQcm90ZWluIGFjcm9zcyBUcmVhdG1lbnRzDQpUUDNfUHJvdFN5bS5wbG90PC1nZ3Bsb3QoVFAzX1Byb3RTeW0uc3VtLCBhZXMoeD1TaXRlLCB5PVRQX3VnLmNtMl9TLCBjb2xvdXI9U2l0ZS5PcmlnKSkgKyANCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9T3JpZy5jb2xvcnMubykrDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49VFBfdWcuY20yX1Mtc2UsIHltYXg9VFBfdWcuY20yX1Mrc2UpLCB3aWR0aD1jYXAuc3osIGxpbmV3aWR0aD1iYXIuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpICsNCiAgZ2VvbV9wb2ludChzaXplPXBvaW50LnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT1sZWcudHh0LnN6KSwgDQogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT1sZWcudGl0bGUuc3opLCANCiAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG9yID0gImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249InRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnU3ltYmlvbnQgUHJvdGVpbiAoXHUwM0JDZyBjbSdeLTIqIikiKSksIGNvbG91cj1OVUxMKSsNCiAgeWxpbSgyNTAsIDU1MCk7IFRQM19Qcm90U3ltLnBsb3QNCmBgYA0KDQoNCiMjIyMgQmlvbWFzcyBIb3N0IA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDMkQUZEV19tZy5jbTJfQykNCnNoYXBpcm8udGVzdChDb3JhbC5UUDMkQUZEV19tZy5jbTJfQykNCiNOb3JtYWwNCg0KIyNNb2RlbA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNCkJpby5DLmxtZV9UUDM8LWxtZXIoQUZEV19tZy5jbTJfQ35PcmlnaW4qU2l0ZSsoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAzKQ0KDQojI0NoZWNrIHJlc2lkdWFscw0KQmlvLkMubG1lX3Jlc19UUDMgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBCaW8uQy5sbWVfVFAzLCBwbG90ID0gRikNCnBsb3QoQmlvLkMubG1lX3Jlc19UUDMpDQoNCiMjTW9kZWwgcmVzdWx0cw0Kc3VtbWFyeShCaW8uQy5sbWVfVFAzKQ0KDQpldGFfc3F1YXJlZChCaW8uQy5sbWVfVFAzKQ0KDQojI1NhdmUgbW9kZWwgcmVzdWx0cw0KQmlvLkNfVFAzLnJlczwtZGF0YS5mcmFtZShzdW1tYXJ5KEJpby5DLmxtZV9UUDMpJGNvZWZmaWNpZW50c1stMSxdKQ0KQmlvLkNfVFAzLnJlcyRQcmVkaWN0b3I8LWMoIk9yaWdpbiIsICJTaXRlIiwgIk9yaWdpbiB4IFNpdGUiKQ0KQmlvLkNfVFAzLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChCaW8uQy5sbWVfVFAzKSRFdGEyKQ0KQmlvLkNfVFAzLnJlcyRSZXNwb25zZTwtcmVwKCJCaW9tYXNzIEhvc3QiLCBucm93KEJpby5DX1RQMy5yZXMpKQ0KDQpgYGANCg0KDQpFZmZlY3Qgc2l6ZSBvZiBPcmlnaW4gZm9yIGVhY2ggU2l0ZQ0KYGBge3J9DQojI0tMDQpCaW8uQy5sbWVfVFAzX0tMPC1sbWVyKEFGRFdfbWcuY20yX0N+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDNbd2hpY2goQ29yYWwuVFAzJFNpdGU9PSJLTCIpLF0pDQpzdW1tYXJ5KEJpby5DLmxtZV9UUDNfS0wpDQpldGFfc3F1YXJlZChCaW8uQy5sbWVfVFAzX0tMKQ0KDQojI1NTDQpCaW8uQy5sbWVfVFAzX1NTPC1sbWVyKEFGRFdfbWcuY20yX0N+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDNbd2hpY2goQ29yYWwuVFAzJFNpdGU9PSJTUyIpLF0pDQpzdW1tYXJ5KEJpby5DLmxtZV9UUDNfU1MpDQpldGFfc3F1YXJlZChCaW8uQy5sbWVfVFAzX1NTKQ0KDQojI1NhdmUgcmVzdWx0cw0KQmlvLkNfVFAzLnNpdGUucmVzPC1kYXRhLmZyYW1lKHJiaW5kKHN1bW1hcnkoQmlvLkMubG1lX1RQM19LTCkkY29lZmZpY2llbnRzWy0xLF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeShCaW8uQy5sbWVfVFAzX1NTKSRjb2VmZmljaWVudHNbLTEsXSkpDQpCaW8uQ19UUDMuc2l0ZS5yZXMkUHJlZGljdG9yPC1jKCJLTCBPcmlnaW4iLCAiU1MgT3JpZ2luIikNCkJpby5DX1RQMy5zaXRlLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChCaW8uQy5sbWVfVFAzX0tMKSRFdGEyLCBldGFfc3F1YXJlZChCaW8uQy5sbWVfVFAzX1NTKSRFdGEyKQ0KQmlvLkNfVFAzLnNpdGUucmVzJFJlc3BvbnNlPC1yZXAoIkJpb21hc3MgSG9zdCIsIG5yb3coQmlvLkNfVFAzLnNpdGUucmVzKSkNCg0KIyNDb21iaW5lIHJlc3VsdHMgDQpCaW8uQ19UUDMucmVzPC1yYmluZChCaW8uQ19UUDMucmVzLCBCaW8uQ19UUDMuc2l0ZS5yZXMpDQoNCmBgYA0KDQoNCmBgYHtyIFBsb3QgQmlvbWFzcyBIb3N0IFRQM30NCiMjU3VtbWFyeSBzdGF0aXN0aWNzIGJ5IFNpdGUgYW5kIE9yaWdpbg0KVFAzX0Jpb0hvc3Quc3VtPC1zdW1tYXJ5U0UoQ29yYWwuVFAzLCBtZWFzdXJldmFyPSJBRkRXX21nLmNtMl9DIiwgZ3JvdXB2YXJzPWMoIlNpdGUiLCAiT3JpZ2luIiwgIlNpdGUuT3JpZyIpLCBuYS5ybT1UUlVFKQ0KDQojI1Bsb3QgQXZlcmFnZSBIb3N0IEJpb21hc3MgYWNyb3NzIFRyZWF0bWVudHMNClRQM19CaW9Ib3N0LnBsb3Q8LWdncGxvdChUUDNfQmlvSG9zdC5zdW0sIGFlcyh4PVNpdGUsIHk9QUZEV19tZy5jbTJfQywgY29sb3VyPVNpdGUuT3JpZykpICsgDQogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPU9yaWcuY29sb3JzLm8pKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUFGRFdfbWcuY20yX0Mtc2UsIHltYXg9QUZEV19tZy5jbTJfQytzZSksIHdpZHRoPWNhcC5zeiwgbGluZXdpZHRoPWJhci5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkgKw0KICBnZW9tX3BvaW50KHNpemU9cG9pbnQuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpKw0KICB0aGVtZV9jbGFzc2ljKCkrDQogIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPWxlZy50eHQuc3opLCANCiAgICAgICAgbGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPWxlZy50aXRsZS5zeiksIA0KICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSAiYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0idG9wIikrDQogIGxhYnMoeD0iU2l0ZSBhbmQgT3JpZ2luIiwgeT1leHByZXNzaW9uKHBhc3RlKCdIb3N0IEJpb21hc3MgKG1nIGNtJ14tMioiKSIpKSwgY29sb3VyPU5VTEwpKw0KICB5bGltKDAuOCwgMS42KTsgVFAzX0Jpb0hvc3QucGxvdA0KYGBgDQoNCg0KIyMjIyBCaW9tYXNzIFN5bWJpb250cyANCmBgYHtyfQ0KIyNDaGVjayBub3JtYWxpdHkNCmhpc3QoQ29yYWwuVFAzJEFGRFdfbWcuY20yX1MpDQpzaGFwaXJvLnRlc3QoQ29yYWwuVFAzJEFGRFdfbWcuY20yX1MpDQojU2xpZ2h0bHkgbm9uIE5vcm1hbA0KDQpoaXN0KGxvZyhDb3JhbC5UUDMkQUZEV19tZy5jbTJfUysxKSkNCnNoYXBpcm8udGVzdChsb2coQ29yYWwuVFAzJEFGRFdfbWcuY20yX1MrMSkpDQojTm9ybWFsDQoNCiMjTW9kZWwgDQojRnVuY3Rpb24gb2YgU2l0ZSBhbmQgT3JpZ2luLCB3aXRoIEdlbm90eXBlIGFzIGEgUmFuZG9tIGVmZmVjdA0KI0ludGVyYWN0aW9ucyBiZXR3ZWVuIE9yaWdpbiBhbmQgU2l0ZQ0KQmlvLlMubG1lX1RQMzwtbG1lcihsb2coQUZEV19tZy5jbTJfUysxKX5PcmlnaW4qU2l0ZSsoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAzKQ0KDQojI0NoZWNrIHJlc2lkdWFscw0KQmlvLlMubG1lX3Jlc19UUDMgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBCaW8uUy5sbWVfVFAzLCBwbG90ID0gRikNCnBsb3QoQmlvLlMubG1lX3Jlc19UUDMpDQoNCiMjTW9kZWwgcmVzdWx0cw0Kc3VtbWFyeShCaW8uUy5sbWVfVFAzKQ0KDQpldGFfc3F1YXJlZChCaW8uUy5sbWVfVFAzKQ0KDQojI1NhdmUgbW9kZWwgcmVzdWx0cw0KQmlvLlNfVFAzLnJlczwtZGF0YS5mcmFtZShzdW1tYXJ5KEJpby5TLmxtZV9UUDMpJGNvZWZmaWNpZW50c1stMSxdKQ0KQmlvLlNfVFAzLnJlcyRQcmVkaWN0b3I8LWMoIk9yaWdpbiIsICJTaXRlIiwgIk9yaWdpbiB4IFNpdGUiKQ0KQmlvLlNfVFAzLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChCaW8uUy5sbWVfVFAzKSRFdGEyKQ0KQmlvLlNfVFAzLnJlcyRSZXNwb25zZTwtcmVwKCJCaW9tYXNzIFN5bWJpb250IiwgbnJvdyhCaW8uU19UUDMucmVzKSkNCg0KYGBgDQoNCg0KRWZmZWN0IHNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KIyNLTA0KQmlvLlMubG1lX1RQM19LTDwtbG1lcihsb2coQUZEV19tZy5jbTJfUysxKX5PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQM1t3aGljaChDb3JhbC5UUDMkU2l0ZT09IktMIiksXSkNCnN1bW1hcnkoQmlvLlMubG1lX1RQM19LTCkNCmV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDNfS0wpDQoNCiMjU1MNCkJpby5TLmxtZV9UUDNfU1M8LWxtZXIobG9nKEFGRFdfbWcuY20yX1MrMSl+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDNbd2hpY2goQ29yYWwuVFAzJFNpdGU9PSJTUyIpLF0pDQpzdW1tYXJ5KEJpby5TLmxtZV9UUDNfU1MpDQpldGFfc3F1YXJlZChCaW8uUy5sbWVfVFAzX1NTKQ0KDQojI1NhdmUgcmVzdWx0cw0KQmlvLlNfVFAzLnNpdGUucmVzPC1kYXRhLmZyYW1lKHJiaW5kKHN1bW1hcnkoQmlvLlMubG1lX1RQM19LTCkkY29lZmZpY2llbnRzWy0xLF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeShCaW8uUy5sbWVfVFAzX1NTKSRjb2VmZmljaWVudHNbLTEsXSkpDQpCaW8uU19UUDMuc2l0ZS5yZXMkUHJlZGljdG9yPC1jKCJLTCBPcmlnaW4iLCAiU1MgT3JpZ2luIikNCkJpby5TX1RQMy5zaXRlLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChCaW8uUy5sbWVfVFAzX0tMKSRFdGEyLCBldGFfc3F1YXJlZChCaW8uUy5sbWVfVFAzX1NTKSRFdGEyKQ0KQmlvLlNfVFAzLnNpdGUucmVzJFJlc3BvbnNlPC1yZXAoIkJpb21hc3MgU3ltYmlvbnQiLCBucm93KEJpby5TX1RQMy5zaXRlLnJlcykpDQoNCiMjQ29tYmluZSByZXN1bHRzIA0KQmlvLlNfVFAzLnJlczwtcmJpbmQoQmlvLlNfVFAzLnJlcywgQmlvLlNfVFAzLnNpdGUucmVzKQ0KDQpgYGANCg0KDQpgYGB7ciBQbG90IEJpb21hc3MgU3ltYmlvbnQgVFAzfQ0KIyNTdW1tYXJ5IHN0YXRpc3RpY3MgYnkgU2l0ZSBhbmQgT3JpZ2luDQpUUDNfQmlvU3ltLnN1bTwtc3VtbWFyeVNFKENvcmFsLlRQMywgbWVhc3VyZXZhcj0iQUZEV19tZy5jbTJfUyIsIGdyb3VwdmFycz1jKCJTaXRlIiwgIk9yaWdpbiIsICJTaXRlLk9yaWciKSwgbmEucm09VFJVRSkNCg0KIyNQbG90IEF2ZXJhZ2UgU3ltYmlvbnQgQmlvbWFzcyBhY3Jvc3MgVHJlYXRtZW50cw0KVFAzX0Jpb1N5bS5wbG90PC1nZ3Bsb3QoVFAzX0Jpb1N5bS5zdW0sIGFlcyh4PVNpdGUsIHk9QUZEV19tZy5jbTJfUywgY29sb3VyPVNpdGUuT3JpZykpICsgDQogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPU9yaWcuY29sb3JzLm8pKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUFGRFdfbWcuY20yX1Mtc2UsIHltYXg9QUZEV19tZy5jbTJfUytzZSksIHdpZHRoPWNhcC5zeiwgbGluZXdpZHRoPWJhci5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkgKw0KICBnZW9tX3BvaW50KHNpemU9cG9pbnQuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpKw0KICB0aGVtZV9jbGFzc2ljKCkrDQogIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPWxlZy50eHQuc3opLCANCiAgICAgICAgbGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPWxlZy50aXRsZS5zeiksIA0KICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSAiYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0idG9wIikrDQogIGxhYnMoeD0iU2l0ZSBhbmQgT3JpZ2luIiwgeT1leHByZXNzaW9uKHBhc3RlKCdTeW1iaW9udCBCaW9tYXNzIChtZyBjbSdeLTIqIikiKSksIGNvbG91cj1OVUxMKSsNCiAgeWxpbSgwLjQ1LCAwLjk1KTsgVFAzX0Jpb1N5bS5wbG90DQpgYGANCg0KDQojIyMjIENobG9yb3BoeWxsDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQMyRDaGxfdWcuY20yKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQMyRDaGxfdWcuY20yKQ0KI05vdCBub3JtYWwNCg0KaGlzdChsb2coQ29yYWwuVFAzJENobF91Zy5jbTIrMSkpDQpzaGFwaXJvLnRlc3QobG9nKENvcmFsLlRQMyRDaGxfdWcuY20yKzEpKQ0KI05vcm1hbA0KDQojI01vZGVsDQojRnVuY3Rpb24gb2YgU2l0ZSBhbmQgT3JpZ2luLCB3aXRoIEdlbm90eXBlIGFzIGEgUmFuZG9tIGVmZmVjdA0KI0ludGVyYWN0aW9ucyBiZXR3ZWVuIE9yaWdpbiBhbmQgU2l0ZQ0KQ2hsLmxtZV9UUDM8LWxtZXIobG9nKENobF91Zy5jbTIrMSl+T3JpZ2luKlNpdGUrKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMykNCg0KIyNDaGVjayByZXNpZHVhbHMNCkNobC5sbWVfcmVzX1RQMyA8LSBzaW11bGF0ZVJlc2lkdWFscyhmaXR0ZWRNb2RlbCA9IENobC5sbWVfVFAzLCBwbG90ID0gRikNCnBsb3QoQ2hsLmxtZV9yZXNfVFAzKQ0KDQojI01vZGVsIHJlc3VsdHMNCnN1bW1hcnkoQ2hsLmxtZV9UUDMpDQoNCmV0YV9zcXVhcmVkKENobC5sbWVfVFAzKQ0KDQojI1NhdmUgbW9kZWwgcmVzdWx0cw0KQ2hsX1RQMy5yZXM8LWRhdGEuZnJhbWUoc3VtbWFyeShDaGwubG1lX1RQMykkY29lZmZpY2llbnRzWy0xLF0pDQpDaGxfVFAzLnJlcyRQcmVkaWN0b3I8LWMoIk9yaWdpbiIsICJTaXRlIiwgIk9yaWdpbiB4IFNpdGUiKQ0KQ2hsX1RQMy5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDMpJEV0YTIpDQpDaGxfVFAzLnJlcyRSZXNwb25zZTwtcmVwKCJDaGxvcm9waHlsbCIsIG5yb3coQ2hsX1RQMy5yZXMpKQ0KDQpgYGANCg0KDQpFZmZlY3Qgc2l6ZSBvZiBPcmlnaW4gZm9yIGVhY2ggU2l0ZQ0KYGBge3J9DQojI0tMDQpDaGwubG1lX1RQM19LTDwtbG1lcihsb2coQ2hsX3VnLmNtMisxKX5PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQM1t3aGljaChDb3JhbC5UUDMkU2l0ZT09IktMIiksXSkNCnN1bW1hcnkoQ2hsLmxtZV9UUDNfS0wpDQpldGFfc3F1YXJlZChDaGwubG1lX1RQM19LTCkNCg0KDQojI1NTDQpDaGwubG1lX1RQM19TUzwtbG1lcihsb2coQ2hsX3VnLmNtMisxKX5PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQM1t3aGljaChDb3JhbC5UUDMkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoQ2hsLmxtZV9UUDNfU1MpDQpldGFfc3F1YXJlZChDaGwubG1lX1RQM19TUykNCg0KIyNTYXZlIHJlc3VsdHMNCkNobF9UUDMuc2l0ZS5yZXM8LWRhdGEuZnJhbWUocmJpbmQoc3VtbWFyeShDaGwubG1lX1RQM19LTCkkY29lZmZpY2llbnRzWy0xLF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeShDaGwubG1lX1RQM19TUykkY29lZmZpY2llbnRzWy0xLF0pKQ0KQ2hsX1RQMy5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KQ2hsX1RQMy5zaXRlLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChDaGwubG1lX1RQM19LTCkkRXRhMiwgZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDNfU1MpJEV0YTIpDQpDaGxfVFAzLnNpdGUucmVzJFJlc3BvbnNlPC1yZXAoIkNobG9yb3BoeWxsIiwgbnJvdyhDaGxfVFAzLnNpdGUucmVzKSkNCg0KIyNDb21iaW5lIHJlc3VsdHMgDQpDaGxfVFAzLnJlczwtcmJpbmQoQ2hsX1RQMy5yZXMsIENobF9UUDMuc2l0ZS5yZXMpDQoNCmBgYA0KDQoNCmBgYHtyIFBsb3QgQ2hsb3JvcGh5bGwgVFAzfQ0KIyNTdW1tYXJ5IHN0YXRpc3RpY3MgYnkgU2l0ZSBhbmQgT3JpZ2luDQpUUDNfQ2hsLnN1bTwtc3VtbWFyeVNFKENvcmFsLlRQMywgbWVhc3VyZXZhcj0iQ2hsX3VnLmNtMiIsIGdyb3VwdmFycz1jKCJTaXRlIiwgIk9yaWdpbiIsICJTaXRlLk9yaWciKSwgbmEucm09VFJVRSkNCg0KIyNQbG90IEF2ZXJhZ2UgQ2hsb3JvcGh5bGwgYWNyb3NzIFRyZWF0bWVudHMNClRQM19DaGwucGxvdDwtZ2dwbG90KFRQM19DaGwuc3VtLCBhZXMoeD1TaXRlLCB5PUNobF91Zy5jbTIsIGNvbG91cj1TaXRlLk9yaWcpKSArIA0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1PcmlnLmNvbG9ycy5vKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1DaGxfdWcuY20yLXNlLCB5bWF4PUNobF91Zy5jbTIrc2UpLCB3aWR0aD1jYXAuc3osIGxpbmV3aWR0aD1iYXIuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpICsNCiAgZ2VvbV9wb2ludChzaXplPXBvaW50LnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT1sZWcudHh0LnN6KSwgDQogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT1sZWcudGl0bGUuc3opLCANCiAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG9yID0gImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249InRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnVG90YWwgQ2hsb3JvcGh5bGwgKFx1MDNCQ2cgY20nXi0yKiIpIikpLCBjb2xvdXI9TlVMTCkrDQogIHlsaW0oMC41LCAzLjI1KSsNCiAgYW5ub3RhdGUoInRleHQiLCB4PTEsIHk9MS41LCBsYWJlbD0iLSIsIHNpemU9bGV2ZWxzLnN6LCBmb250ZmFjZT0iYm9sZCIpOyBUUDNfQ2hsLnBsb3QNCmBgYA0KDQoNCiMjIyMgU2F2ZSBSZXN1bHRzDQpgYGB7cn0NCiMjQ29tYmluZSBSZXN1bHRzDQpQaHlzX1QzLnJlczwtcmJpbmQoUHJvdC5DX1RQMy5yZXMsIFByb3QuU19UUDMucmVzLCBCaW8uQ19UUDMucmVzLCBCaW8uU19UUDMucmVzLCBDaGxfVFAzLnJlcykNCg0KIyNBZGQgVGltZXBvaW50DQpQaHlzX1QzLnJlcyRUaW1lUDwtcmVwKCJUMyIsIG5yb3coUGh5c19UMy5yZXMpKQ0KDQpgYGANCg0KDQojIyMgVFA0DQoNCmBgYHtyfQ0KIyNTdWJzZXQgVGltZXBvaW50IDQgDQpDb3JhbC5UUDQ8LXN1YnNldChDb3JhbC5ybSwgVGltZVA9PSJUUDQiKQ0KDQpgYGANCg0KDQojIyMjIFByb3RlaW4gSG9zdCANCmBgYHtyfQ0KIyNDaGVjayBub3JtYWxpdHkNCmhpc3QoQ29yYWwuVFA0JFRQX3VnLmNtMl9DKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQNCRUUF91Zy5jbTJfQykNCiNOb3JtYWwNCg0KIyNNb2RlbCANCiNGdW5jdGlvbiBvZiBTaXRlIGFuZCBPcmlnaW4sIHdpdGggR2Vub3R5cGUgYXMgYSBSYW5kb20gZWZmZWN0DQojSW50ZXJhY3Rpb25zIGJldHdlZW4gT3JpZ2luIGFuZCBTaXRlDQpQcm90LkMubG1lX1RQNDwtbG1lcihUUF91Zy5jbTJfQ35PcmlnaW4qU2l0ZSsoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFA0KQ0KDQojI0NoZWNrIHJlc2lkdWFscw0KUHJvdC5DLmxtZV9yZXNfVFA0IDwtIHNpbXVsYXRlUmVzaWR1YWxzKGZpdHRlZE1vZGVsID0gUHJvdC5DLmxtZV9UUDQsIHBsb3QgPSBGKQ0KcGxvdChQcm90LkMubG1lX3Jlc19UUDQpDQoNCiMjTW9kZWwgcmVzdWx0cw0Kc3VtbWFyeShQcm90LkMubG1lX1RQNCkNCg0KZXRhX3NxdWFyZWQoUHJvdC5DLmxtZV9UUDQpDQoNCiMjU2F2ZSBtb2RlbCByZXN1bHRzDQpQcm90LkNfVFA0LnJlczwtZGF0YS5mcmFtZShzdW1tYXJ5KFByb3QuQy5sbWVfVFA0KSRjb2VmZmljaWVudHNbLTEsXSkNClByb3QuQ19UUDQucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpQcm90LkNfVFA0LnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChQcm90LkMubG1lX1RQNCkkRXRhMikNClByb3QuQ19UUDQucmVzJFJlc3BvbnNlPC1yZXAoIlByb3RlaW4gSG9zdCIsIG5yb3coUHJvdC5DX1RQNC5yZXMpKQ0KDQpgYGANCg0KDQojIyMjIFByb3RlaW4gU3ltYmlvbnQgDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQNCRUUF91Zy5jbTJfUykNCnNoYXBpcm8udGVzdChDb3JhbC5UUDQkVFBfdWcuY20yX1MpDQojTm9ybWFsDQoNCiMjTW9kZWwNCiNGdW5jdGlvbiBvZiBTaXRlIGFuZCBPcmlnaW4sIHdpdGggR2Vub3R5cGUgYXMgYSBSYW5kb20gZWZmZWN0DQojSW50ZXJhY3Rpb25zIGJldHdlZW4gT3JpZ2luIGFuZCBTaXRlDQpQcm90LlMubG1lX1RQNDwtbG1lcihUUF91Zy5jbTJfU35PcmlnaW4qU2l0ZSsoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFA0KQ0KDQojI0NoZWNrIHJlc2lkdWFscw0KUHJvdC5TLmxtZV9yZXNfVFA0IDwtIHNpbXVsYXRlUmVzaWR1YWxzKGZpdHRlZE1vZGVsID0gUHJvdC5TLmxtZV9UUDQsIHBsb3QgPSBGKQ0KcGxvdChQcm90LlMubG1lX3Jlc19UUDQpDQoNCiMjTW9kZWwgcmVzdWx0cw0Kc3VtbWFyeShQcm90LlMubG1lX1RQNCkNCg0KZXRhX3NxdWFyZWQoUHJvdC5TLmxtZV9UUDQpDQoNCiMjU2F2ZSBtb2RlbCByZXN1bHRzDQpQcm90LlNfVFA0LnJlczwtZGF0YS5mcmFtZShzdW1tYXJ5KFByb3QuUy5sbWVfVFA0KSRjb2VmZmljaWVudHNbLTEsXSkNClByb3QuU19UUDQucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpQcm90LlNfVFA0LnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChQcm90LlMubG1lX1RQNCkkRXRhMikNClByb3QuU19UUDQucmVzJFJlc3BvbnNlPC1yZXAoIlByb3RlaW4gU3ltYmlvbnQiLCBucm93KFByb3QuU19UUDQucmVzKSkNCg0KYGBgDQoNCkVmZmVjdCBzaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCiMjS0wNClByb3QuUy5sbWVfVFA0X0tMPC1sbWVyKFRQX3VnLmNtMl9Tfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFA0W3doaWNoKENvcmFsLlRQNCRTaXRlPT0iS0wiKSxdKQ0Kc3VtbWFyeShQcm90LlMubG1lX1RQNF9LTCkNCmV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFA0X0tMKQ0KDQojI1NTDQpQcm90LlMubG1lX1RQNF9TUzwtbG1lcihUUF91Zy5jbTJfU35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQNFt3aGljaChDb3JhbC5UUDQkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoUHJvdC5TLmxtZV9UUDRfU1MpDQpldGFfc3F1YXJlZChQcm90LlMubG1lX1RQNF9TUykNCg0KIyNTYXZlIHJlc3VsdHMNClByb3QuU19UUDQuc2l0ZS5yZXM8LWRhdGEuZnJhbWUocmJpbmQoc3VtbWFyeShQcm90LlMubG1lX1RQNF9LTCkkY29lZmZpY2llbnRzWy0xLF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeShQcm90LlMubG1lX1RQNF9TUykkY29lZmZpY2llbnRzWy0xLF0pKQ0KUHJvdC5TX1RQNC5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KUHJvdC5TX1RQNC5zaXRlLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChQcm90LlMubG1lX1RQNF9LTCkkRXRhMiwgZXRhX3NxdWFyZWQoUHJvdC5TLmxtZV9UUDRfU1MpJEV0YTIpDQpQcm90LlNfVFA0LnNpdGUucmVzJFJlc3BvbnNlPC1yZXAoIlByb3RlaW4gU3ltYmlvbnQiLCBucm93KFByb3QuU19UUDQuc2l0ZS5yZXMpKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANClByb3QuU19UUDQucmVzPC1yYmluZChQcm90LlNfVFA0LnJlcywgUHJvdC5TX1RQNC5zaXRlLnJlcykNCg0KYGBgDQoNCg0KDQpgYGB7ciBQbG90IFByb3RlaW4gU3ltYmlvbnQgVFA0fQ0KIyNTdW1tYXJ5IHN0YXRpc3RpY3MgYnkgU2l0ZSBhbmQgT3JpZ2luDQpUUDRfUHJvdFN5bS5zdW08LXN1bW1hcnlTRShDb3JhbC5UUDQsIG1lYXN1cmV2YXI9IlRQX3VnLmNtMl9TIiwgZ3JvdXB2YXJzPWMoIlNpdGUiLCAiT3JpZ2luIiwgIlNpdGUuT3JpZyIpLCBuYS5ybT1UUlVFKQ0KDQojI1Bsb3QgQXZlcmFnZSBTeW1iaW9udCBQcm90ZWluIGFjcm9zcyBUcmVhdG1lbnRzDQpUUDRfUHJvdFN5bS5wbG90PC1nZ3Bsb3QoVFA0X1Byb3RTeW0uc3VtLCBhZXMoeD1TaXRlLCB5PVRQX3VnLmNtMl9TLCBjb2xvdXI9U2l0ZS5PcmlnKSkgKyANCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9T3JpZy5jb2xvcnMubykrDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49VFBfdWcuY20yX1Mtc2UsIHltYXg9VFBfdWcuY20yX1Mrc2UpLCB3aWR0aD1jYXAuc3osIGxpbmV3aWR0aD1iYXIuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpICsNCiAgZ2VvbV9wb2ludChzaXplPXBvaW50LnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT1sZWcudHh0LnN6KSwgDQogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT1sZWcudGl0bGUuc3opLCANCiAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG9yID0gImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249InRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnU3ltYmlvbnQgUHJvdGVpbiAoXHUwM0JDZyBjbSdeLTIqIikiKSksIGNvbG91cj1OVUxMKSsNCiAgeWxpbSgyNTAsIDU1MCk7IFRQNF9Qcm90U3ltLnBsb3QNCmBgYA0KDQoNCiMjIyMgQmlvbWFzcyBIb3N0IA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDQkQUZEV19tZy5jbTJfQykNCnNoYXBpcm8udGVzdChDb3JhbC5UUDQkQUZEV19tZy5jbTJfQykNCiNOb3JtYWwNCg0KIyNNb2RlbA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNCkJpby5DLmxtZV9UUDQ8LWxtZXIoQUZEV19tZy5jbTJfQ35PcmlnaW4qU2l0ZSsoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFA0KQ0KDQojI0NoZWNrIHJlc2lkdWFscw0KQmlvLkMubG1lX3Jlc19UUDQgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBCaW8uQy5sbWVfVFA0LCBwbG90ID0gRikNCnBsb3QoQmlvLkMubG1lX3Jlc19UUDQpDQoNCiMjTW9kZWwgcmVzdWx0cw0Kc3VtbWFyeShCaW8uQy5sbWVfVFA0KQ0KDQpldGFfc3F1YXJlZChCaW8uQy5sbWVfVFA0KQ0KDQojI1NhdmUgbW9kZWwgcmVzdWx0cw0KQmlvLkNfVFA0LnJlczwtZGF0YS5mcmFtZShzdW1tYXJ5KEJpby5DLmxtZV9UUDQpJGNvZWZmaWNpZW50c1stMSxdKQ0KQmlvLkNfVFA0LnJlcyRQcmVkaWN0b3I8LWMoIk9yaWdpbiIsICJTaXRlIiwgIk9yaWdpbiB4IFNpdGUiKQ0KQmlvLkNfVFA0LnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChCaW8uQy5sbWVfVFA0KSRFdGEyKQ0KQmlvLkNfVFA0LnJlcyRSZXNwb25zZTwtcmVwKCJCaW9tYXNzIEhvc3QiLCBucm93KEJpby5DX1RQNC5yZXMpKQ0KDQpgYGANCg0KDQpFZmZlY3Qgc2l6ZSBvZiBPcmlnaW4gZm9yIGVhY2ggU2l0ZQ0KYGBge3J9DQoNCiMjS0wNCkJpby5DLmxtZV9UUDRfS0w8LWxtZXIoQUZEV19tZy5jbTJfQ35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQNFt3aGljaChDb3JhbC5UUDQkU2l0ZT09IktMIiksXSkNCnN1bW1hcnkoQmlvLkMubG1lX1RQNF9LTCkNCmV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDRfS0wpDQoNCiMjU1MNCkJpby5DLmxtZV9UUDRfU1M8LWxtZXIoQUZEV19tZy5jbTJfQ35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQNFt3aGljaChDb3JhbC5UUDQkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoQmlvLkMubG1lX1RQNF9TUykNCmV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDRfU1MpDQoNCiMjU2F2ZSByZXN1bHRzDQpCaW8uQ19UUDQuc2l0ZS5yZXM8LWRhdGEuZnJhbWUocmJpbmQoc3VtbWFyeShCaW8uQy5sbWVfVFA0X0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KEJpby5DLmxtZV9UUDRfU1MpJGNvZWZmaWNpZW50c1stMSxdKSkNCkJpby5DX1RQNC5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KQmlvLkNfVFA0LnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDRfS0wpJEV0YTIsIGV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDRfU1MpJEV0YTIpDQpCaW8uQ19UUDQuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiQmlvbWFzcyBIb3N0IiwgbnJvdyhCaW8uQ19UUDQuc2l0ZS5yZXMpKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANCkJpby5DX1RQNC5yZXM8LXJiaW5kKEJpby5DX1RQNC5yZXMsIEJpby5DX1RQNC5zaXRlLnJlcykNCg0KYGBgDQoNCg0KYGBge3IgUGxvdCBCaW9tYXNzIEhvc3QgVFA0fQ0KIyNTdW1tYXJ5IHN0YXRpc3RpY3MgYnkgU2l0ZSBhbmQgT3JpZ2luDQpUUDRfQmlvSG9zdC5zdW08LXN1bW1hcnlTRShDb3JhbC5UUDQsIG1lYXN1cmV2YXI9IkFGRFdfbWcuY20yX0MiLCBncm91cHZhcnM9YygiU2l0ZSIsICJPcmlnaW4iLCAiU2l0ZS5PcmlnIiksIG5hLnJtPVRSVUUpDQoNCiMjUGxvdCBBdmVyYWdlIEhvc3QgQmlvbWFzcyBhY3Jvc3MgVHJlYXRtZW50cw0KVFA0X0Jpb0hvc3QucGxvdDwtZ2dwbG90KFRQNF9CaW9Ib3N0LnN1bSwgYWVzKHg9U2l0ZSwgeT1BRkRXX21nLmNtMl9DLCBjb2xvdXI9U2l0ZS5PcmlnKSkgKyANCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9T3JpZy5jb2xvcnMubykrDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49QUZEV19tZy5jbTJfQy1zZSwgeW1heD1BRkRXX21nLmNtMl9DK3NlKSwgd2lkdGg9Y2FwLnN6LCBsaW5ld2lkdGg9YmFyLnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSArDQogIGdlb21fcG9pbnQoc2l6ZT1wb2ludC5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkrDQogIHRoZW1lX2NsYXNzaWMoKSsNCiAgdGhlbWUoYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJ0b3AiKSsNCiAgbGFicyh4PSJTaXRlIGFuZCBPcmlnaW4iLCB5PWV4cHJlc3Npb24ocGFzdGUoJ0hvc3QgQmlvbWFzcyAobWcgY20nXi0yKiIpIikpLCBjb2xvdXI9TlVMTCkrDQogIHlsaW0oMC44LCAxLjYpKw0KICBhbm5vdGF0ZSgidGV4dCIsIHg9MiwgeT0xLjQ1LCBsYWJlbD0iKiIsIHNpemU9c2lnLnN6LCBmb250ZmFjZT0iYm9sZCIpOyBUUDRfQmlvSG9zdC5wbG90DQpgYGANCg0KDQojIyMjIEJpb21hc3MgU3ltYmlvbnRzIA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDQkQUZEV19tZy5jbTJfUykNCnNoYXBpcm8udGVzdChDb3JhbC5UUDQkQUZEV19tZy5jbTJfUykNCiNOb3JtYWwNCg0KIyNNb2RlbCANCiNGdW5jdGlvbiBvZiBTaXRlIGFuZCBPcmlnaW4sIHdpdGggR2Vub3R5cGUgYXMgYSBSYW5kb20gZWZmZWN0DQojSW50ZXJhY3Rpb25zIGJldHdlZW4gT3JpZ2luIGFuZCBTaXRlDQpCaW8uUy5sbWVfVFA0PC1sbWVyKEFGRFdfbWcuY20yX1N+T3JpZ2luKlNpdGUrKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQNCkNCg0KIyNDaGVjayByZXNpZHVhbHMNCkJpby5TLmxtZV9yZXNfVFA0IDwtIHNpbXVsYXRlUmVzaWR1YWxzKGZpdHRlZE1vZGVsID0gQmlvLlMubG1lX1RQNCwgcGxvdCA9IEYpDQpwbG90KEJpby5TLmxtZV9yZXNfVFA0KQ0KDQojI01vZGVsIHJlc3VsdHMNCnN1bW1hcnkoQmlvLlMubG1lX1RQNCkNCg0KZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQNCkNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNCkJpby5TX1RQNC5yZXM8LWRhdGEuZnJhbWUoc3VtbWFyeShCaW8uUy5sbWVfVFA0KSRjb2VmZmljaWVudHNbLTEsXSkNCkJpby5TX1RQNC5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNCkJpby5TX1RQNC5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQNCkkRXRhMikNCkJpby5TX1RQNC5yZXMkUmVzcG9uc2U8LXJlcCgiQmlvbWFzcyBTeW1iaW9udCIsIG5yb3coQmlvLlNfVFA0LnJlcykpDQoNCmBgYA0KDQoNCkVmZmVjdCBzaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCiMjS0wNCkJpby5TLmxtZV9UUDRfS0w8LWxtZXIoQUZEV19tZy5jbTJfU35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQNFt3aGljaChDb3JhbC5UUDQkU2l0ZT09IktMIiksXSkNCnN1bW1hcnkoQmlvLlMubG1lX1RQNF9LTCkNCmV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDRfS0wpDQoNCiMjU1MNCkJpby5TLmxtZV9UUDRfU1M8LWxtZXIoQUZEV19tZy5jbTJfU35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQNFt3aGljaChDb3JhbC5UUDQkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoQmlvLlMubG1lX1RQNF9TUykNCmV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDRfU1MpDQoNCiMjU2F2ZSByZXN1bHRzDQpCaW8uU19UUDQuc2l0ZS5yZXM8LWRhdGEuZnJhbWUocmJpbmQoc3VtbWFyeShCaW8uUy5sbWVfVFA0X0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KEJpby5TLmxtZV9UUDRfU1MpJGNvZWZmaWNpZW50c1stMSxdKSkNCkJpby5TX1RQNC5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KQmlvLlNfVFA0LnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDRfS0wpJEV0YTIsIGV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDRfU1MpJEV0YTIpDQpCaW8uU19UUDQuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiQmlvbWFzcyBTeW1iaW9udCIsIG5yb3coQmlvLlNfVFA0LnNpdGUucmVzKSkNCg0KIyNDb21iaW5lIHJlc3VsdHMgDQpCaW8uU19UUDQucmVzPC1yYmluZChCaW8uU19UUDQucmVzLCBCaW8uU19UUDQuc2l0ZS5yZXMpDQoNCmBgYA0KDQoNCmBgYHtyIFBsb3QgQmlvbWFzcyBTeW1iaW9udCBUUDR9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQNF9CaW9TeW0uc3VtPC1zdW1tYXJ5U0UoQ29yYWwuVFA0LCBtZWFzdXJldmFyPSJBRkRXX21nLmNtMl9TIiwgZ3JvdXB2YXJzPWMoIlNpdGUiLCAiT3JpZ2luIiwgIlNpdGUuT3JpZyIpLCBuYS5ybT1UUlVFKQ0KDQojI1Bsb3QgQXZlcmFnZSBTeW1iaW9udCBCaW9tYXNzIGFjcm9zcyBUcmVhdG1lbnRzDQpUUDRfQmlvU3ltLnBsb3Q8LWdncGxvdChUUDRfQmlvU3ltLnN1bSwgYWVzKHg9U2l0ZSwgeT1BRkRXX21nLmNtMl9TLCBjb2xvdXI9U2l0ZS5PcmlnKSkgKyANCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9T3JpZy5jb2xvcnMubykrDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49QUZEV19tZy5jbTJfUy1zZSwgeW1heD1BRkRXX21nLmNtMl9TK3NlKSwgd2lkdGg9Y2FwLnN6LCBsaW5ld2lkdGg9YmFyLnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSArDQogIGdlb21fcG9pbnQoc2l6ZT1wb2ludC5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkrDQogIHRoZW1lX2NsYXNzaWMoKSsNCiAgdGhlbWUoYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJ0b3AiKSsNCiAgbGFicyh4PSJTaXRlIGFuZCBPcmlnaW4iLCB5PWV4cHJlc3Npb24ocGFzdGUoJ1N5bWJpb250IEJpb21hc3MgKG1nIGNtJ14tMioiKSIpKSwgY29sb3VyPU5VTEwpKw0KICB5bGltKDAuNDUsIDAuOTUpOyBUUDRfQmlvU3ltLnBsb3QNCmBgYA0KDQoNCiMjIyMgQ2hsb3JvcGh5bGwNCmBgYHtyfQ0KIyNDaGVjayBub3JtYWxpdHkNCmhpc3QoQ29yYWwuVFA0JENobF91Zy5jbTIpDQpzaGFwaXJvLnRlc3QoQ29yYWwuVFA0JENobF91Zy5jbTIpDQojU2xpZ2h0bHkgbm9uIG5vcm1hbA0KDQpoaXN0KGxvZyhDb3JhbC5UUDQkQ2hsX3VnLmNtMisxKSkNCnNoYXBpcm8udGVzdChsb2coQ29yYWwuVFA0JENobF91Zy5jbTIrMSkpDQojTm9ybWFsDQoNCiMjTW9kZWwNCiNGdW5jdGlvbiBvZiBTaXRlIGFuZCBPcmlnaW4sIHdpdGggR2Vub3R5cGUgYXMgYSBSYW5kb20gZWZmZWN0DQojSW50ZXJhY3Rpb25zIGJldHdlZW4gT3JpZ2luIGFuZCBTaXRlDQpDaGwubG1lX1RQNDwtbG1lcihsb2coQ2hsX3VnLmNtMisxKX5PcmlnaW4qU2l0ZSsoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFA0KQ0KDQojI0NoZWNrIHJlc2lkdWFscw0KQ2hsLmxtZV9yZXNfVFA0IDwtIHNpbXVsYXRlUmVzaWR1YWxzKGZpdHRlZE1vZGVsID0gQ2hsLmxtZV9UUDQsIHBsb3QgPSBGKQ0KcGxvdChDaGwubG1lX3Jlc19UUDQpDQoNCiMjTW9kZWwgcmVzdWx0cw0Kc3VtbWFyeShDaGwubG1lX1RQNCkNCg0KZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDQpDQoNCiMjU2F2ZSBtb2RlbCByZXN1bHRzDQpDaGxfVFA0LnJlczwtZGF0YS5mcmFtZShzdW1tYXJ5KENobC5sbWVfVFA0KSRjb2VmZmljaWVudHNbLTEsXSkNCkNobF9UUDQucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpDaGxfVFA0LnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChDaGwubG1lX1RQNCkkRXRhMikNCkNobF9UUDQucmVzJFJlc3BvbnNlPC1yZXAoIkNobG9yb3BoeWxsIiwgbnJvdyhDaGxfVFA0LnJlcykpDQoNCmBgYA0KDQoNCkVmZmVjdCBzaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCg0KIyNLTA0KQ2hsLmxtZV9UUDRfS0w8LWxtZXIobG9nKENobF91Zy5jbTIrMSl+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDRbd2hpY2goQ29yYWwuVFA0JFNpdGU9PSJLTCIpLF0pDQpzdW1tYXJ5KENobC5sbWVfVFA0X0tMKQ0KZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDRfS0wpDQoNCg0KIyNTUw0KQ2hsLmxtZV9UUDRfU1M8LWxtZXIobG9nKENobF91Zy5jbTIrMSl+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDRbd2hpY2goQ29yYWwuVFA0JFNpdGU9PSJTUyIpLF0pDQpzdW1tYXJ5KENobC5sbWVfVFA0X1NTKQ0KZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDRfU1MpDQoNCiMjU2F2ZSByZXN1bHRzDQpDaGxfVFA0LnNpdGUucmVzPC1kYXRhLmZyYW1lKHJiaW5kKHN1bW1hcnkoQ2hsLmxtZV9UUDRfS0wpJGNvZWZmaWNpZW50c1stMSxdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkoQ2hsLmxtZV9UUDRfU1MpJGNvZWZmaWNpZW50c1stMSxdKSkNCkNobF9UUDQuc2l0ZS5yZXMkUHJlZGljdG9yPC1jKCJLTCBPcmlnaW4iLCAiU1MgT3JpZ2luIikNCkNobF9UUDQuc2l0ZS5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDRfS0wpJEV0YTIsIGV0YV9zcXVhcmVkKENobC5sbWVfVFA0X1NTKSRFdGEyKQ0KQ2hsX1RQNC5zaXRlLnJlcyRSZXNwb25zZTwtcmVwKCJDaGxvcm9waHlsbCIsIG5yb3coQ2hsX1RQNC5zaXRlLnJlcykpDQoNCiMjQ29tYmluZSByZXN1bHRzIA0KQ2hsX1RQNC5yZXM8LXJiaW5kKENobF9UUDQucmVzLCBDaGxfVFA0LnNpdGUucmVzKQ0KDQpgYGANCg0KDQpgYGB7ciBQbG90IENobG9yb3BoeWxsIFRQNH0NCiMjU3VtbWFyeSBzdGF0aXN0aWNzIGJ5IFNpdGUgYW5kIE9yaWdpbg0KVFA0X0NobC5zdW08LXN1bW1hcnlTRShDb3JhbC5UUDQsIG1lYXN1cmV2YXI9IkNobF91Zy5jbTIiLCBncm91cHZhcnM9YygiU2l0ZSIsICJPcmlnaW4iLCAiU2l0ZS5PcmlnIiksIG5hLnJtPVRSVUUpDQoNCiMjUGxvdCBBdmVyYWdlIENobG9yb3BoeWxsIGFjcm9zcyBUcmVhdG1lbnRzDQpUUDRfQ2hsLnBsb3Q8LWdncGxvdChUUDRfQ2hsLnN1bSwgYWVzKHg9U2l0ZSwgeT1DaGxfdWcuY20yLCBjb2xvdXI9U2l0ZS5PcmlnKSkgKyANCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9T3JpZy5jb2xvcnMubykrDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49Q2hsX3VnLmNtMi1zZSwgeW1heD1DaGxfdWcuY20yK3NlKSwgd2lkdGg9Y2FwLnN6LCBsaW5ld2lkdGg9YmFyLnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSArDQogIGdlb21fcG9pbnQoc2l6ZT1wb2ludC5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkrDQogIHRoZW1lX2NsYXNzaWMoKSsNCiAgdGhlbWUoYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJ0b3AiKSsNCiAgbGFicyh4PSJTaXRlIGFuZCBPcmlnaW4iLCB5PWV4cHJlc3Npb24ocGFzdGUoJ1RvdGFsIENobG9yb3BoeWxsIChcdTAzQkNnIGNtJ14tMioiKSIpKSwgY29sb3VyPU5VTEwpKw0KICB5bGltKDAuNSwgMy4yNSk7IFRQNF9DaGwucGxvdA0KYGBgDQoNCg0KIyMjIyBTYXZlIFJlc3VsdHMNCmBgYHtyfQ0KIyNDb21iaW5lIFJlc3VsdHMNClBoeXNfVDQucmVzPC1yYmluZChQcm90LkNfVFA0LnJlcywgUHJvdC5TX1RQNC5yZXMsIEJpby5DX1RQNC5yZXMsIEJpby5TX1RQNC5yZXMsIENobF9UUDQucmVzKQ0KDQojI0FkZCBUaW1lcG9pbnQNClBoeXNfVDQucmVzJFRpbWVQPC1yZXAoIlQ0IiwgbnJvdyhQaHlzX1Q0LnJlcykpDQoNCmBgYA0KDQoNCiMjIyBFZmZlY3QgU2l6ZSBvdmVyIFRpbWUNCmBgYHtyfQ0KIyNEYXRhZnJhbWUgb2YgZWZmZWN0IHNpemUgcmVzdWx0cw0KUGh5cy5FUzwtcmJpbmQoUGh5c19UMS5yZXMsIFBoeXNfVDIucmVzLCBQaHlzX1QzLnJlcywgUGh5c19UNC5yZXMpDQpQaHlzLkVTPC1QaHlzLkVTICU+JSBkcGx5cjo6cmVuYW1lKHAgPSBQci4uLnQuLikNClBoeXMuRVM8LVBoeXMuRVNbLGMoIlRpbWVQIiwgIlByZWRpY3RvciIsICJSZXNwb25zZSIsICJFdGFTcSIsICJwIildDQoNCiMjU2l0ZSBzcGVjaWZpYyByZXN1bHRzDQpQaHlzLkVTPC1QaHlzLkVTW3doaWNoKFBoeXMuRVMkUHJlZGljdG9yPT0iS0wgT3JpZ2luIiB8IFBoeXMuRVMkUHJlZGljdG9yPT0iU1MgT3JpZ2luIiksXQ0KUGh5cy5FUzwtUGh5cy5FUyAlPiUgc2VwYXJhdGVfd2lkZXJfZGVsaW0oY29scz0iUHJlZGljdG9yIiwgZGVsaW09IiAiLCBuYW1lcz1jKCJTaXRlIiwgIlByZWRpY3RvciIpLCBjb2xzX3JlbW92ZSA9IFRSVUUpDQoNCiMjQWRkIE1ldHJpYyBuYW1lcw0KUGh5cy5FUyRNZXRyaWM8LWlmZWxzZShQaHlzLkVTJFJlc3BvbnNlPT0gIlByb3RlaW4gSG9zdCIsICJUUF91Zy5jbTJfQyIsIGlmZWxzZSgNCiAgUGh5cy5FUyRSZXNwb25zZT09ICJQcm90ZWluIFN5bWJpb250IiwgIlRQX3VnLmNtMl9TIiwgaWZlbHNlKA0KICAgIFBoeXMuRVMkUmVzcG9uc2U9PSJCaW9tYXNzIEhvc3QiLCAiQUZEV19tZy5jbTJfQyIsIGlmZWxzZSgNCiAgICAgIFBoeXMuRVMkUmVzcG9uc2U9PSJCaW9tYXNzIFN5bWJpb250IiwgIkFGRFdfbWcuY20yX1MiLCBpZmVsc2UoDQogICAgICAgIFBoeXMuRVMkUmVzcG9uc2U9PSJDaGxvcm9waHlsbCIsICJDaGxfdWcuY20yIiwgTkEpKSkpKQ0KDQojI0FkZCBTaWduaWZpY2FuY2UgbGV2ZWxzDQpQaHlzLkVTJFNpZzwtaWZlbHNlKFBoeXMuRVMkcDwwLjAwMSwgIioqKiIsIGlmZWxzZShQaHlzLkVTJHA8MC4wMSwgIioqIiwgDQogICAgICAgICAgICBpZmVsc2UoUGh5cy5FUyRwPDAuMDUsICIqIiwgaWZlbHNlKFBoeXMuRVMkcDwwLjEsICItIiwgTkEpKSkpDQoNCmBgYA0KDQoNCiMjIyMgSG9zdCBCaW9tYXNzDQpgYGB7ciBQbG90IEVmZmVjdCBTaXplIEhvc3QgQmlvbWFzc30NCkJpby5DLkVTLnBsb3Q8LWdncGxvdChQaHlzLkVTW3doaWNoKFBoeXMuRVMkTWV0cmljPT0iQUZEV19tZy5jbTJfQyIpLF0sIGFlcyh4PVRpbWVQLCB5PUV0YVNxLCBmaWxsPVNpdGUpKSsNCiAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsNCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9U2l0ZS5jb2xvcnMubykrDQp0aGVtZV9jbGFzc2ljKCkrDQogIGdndGl0bGUoIkhvc3QgQmlvbWFzcyIpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91cj0iYmxhY2siLCBzaXplPXBhbmVsLmxhYi5zeiwgaGp1c3Q9MC41KSwgDQogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoLjksIC44KSkrDQogICBsYWJzKHg9IlRpbWUgUG9pbnQiLCB5PWV4cHJlc3Npb24ocGFzdGUoIk9yaWdpbiBFZmZlY3QgU2l6ZSAocCIsIGV0YV4yLCAiKSIpKSwgY29sb3VyPSJTaXRlIikrDQogIHlsaW0oMCwgMC42KSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbD1TaWcpLCB2anVzdD0tMC4wMiwgY29sb3I9ImJsYWNrIiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoMC45KSwgc2l6ZT1sZXZlbHMuc3osIGZvbnRmYWNlPSJib2xkIik7IEJpby5DLkVTLnBsb3QNCg0KYGBgDQoNCiMjIyMgU3ltYmlvbnQgQmlvbWFzcw0KYGBge3IgUGxvdCBFZmZlY3QgU2l6ZSBTeW1iaW9udCBCaW9tYXNzfQ0KQmlvLlMuRVMucGxvdDwtZ2dwbG90KFBoeXMuRVNbd2hpY2goUGh5cy5FUyRNZXRyaWM9PSJBRkRXX21nLmNtMl9TIiksXSwgYWVzKHg9VGltZVAsIHk9RXRhU3EsIGZpbGw9U2l0ZSkpKw0KICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKCkpKw0KICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1TaXRlLmNvbG9ycy5vKSsNCnRoZW1lX2NsYXNzaWMoKSsNCiAgZ2d0aXRsZSgiU3ltYmlvbnQgQmlvbWFzcyIpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91cj0iYmxhY2siLCBzaXplPXBhbmVsLmxhYi5zeiwgaGp1c3Q9MC41KSwgDQogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoLjksIC44KSkrDQogICBsYWJzKHg9IlRpbWUgUG9pbnQiLCB5PWV4cHJlc3Npb24ocGFzdGUoIk9yaWdpbiBFZmZlY3QgU2l6ZSAocCIsIGV0YV4yLCAiKSIpKSwgY29sb3VyPSJTaXRlIikrDQogIHlsaW0oMCwgMC42KSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbD1TaWcpLCB2anVzdD0tMC4wMiwgY29sb3I9ImJsYWNrIiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoMC45KSwgc2l6ZT1sZXZlbHMuc3osIGZvbnRmYWNlPSJib2xkIik7IEJpby5TLkVTLnBsb3QNCg0KYGBgDQoNCg0KIyMjIyBTeW1iaW9udCBQcm90ZWluDQpgYGB7ciBQbG90IEVmZmVjdCBTaXplIFN5bWJpb250IFByb3RlaW59DQpQcm90LlMuRVMucGxvdDwtZ2dwbG90KFBoeXMuRVNbd2hpY2goUGh5cy5FUyRNZXRyaWM9PSJUUF91Zy5jbTJfUyIpLF0sIGFlcyh4PVRpbWVQLCB5PUV0YVNxLCBmaWxsPVNpdGUpKSsNCiAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsNCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9U2l0ZS5jb2xvcnMubykrDQp0aGVtZV9jbGFzc2ljKCkrDQogIGdndGl0bGUoIlN5bWJpb250IFByb3RlaW4iKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXI9ImJsYWNrIiwgc2l6ZT1wYW5lbC5sYWIuc3osIGhqdXN0PTAuNSksIA0KICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPWxlZy50eHQuc3opLCANCiAgICAgICAgbGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPWxlZy50aXRsZS5zeiksIA0KICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSAiYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj1jKC45LCAuOCkpKw0KICAgbGFicyh4PSJUaW1lIFBvaW50IiwgeT1leHByZXNzaW9uKHBhc3RlKCJPcmlnaW4gRWZmZWN0IFNpemUgKHAiLCBldGFeMiwgIikiKSksIGNvbG91cj0iU2l0ZSIpKw0KICB5bGltKDAsIDAuNikrDQogIGdlb21fdGV4dChhZXMobGFiZWw9U2lnKSwgdmp1c3Q9LTAuMDIsIGNvbG9yPSJibGFjayIsIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKDAuOSksIHNpemU9bGV2ZWxzLnN6LCBmb250ZmFjZT0iYm9sZCIpOyBQcm90LlMuRVMucGxvdA0KDQpgYGANCg0KDQojIyMjIENobG9yb3BoeWxsDQpgYGB7ciBQbG90IEVmZmVjdCBTaXplIENobG9yb3BoeWxsfQ0KQ2hsLkVTLnBsb3Q8LWdncGxvdChQaHlzLkVTW3doaWNoKFBoeXMuRVMkTWV0cmljPT0iQ2hsX3VnLmNtMiIpLF0sIGFlcyh4PVRpbWVQLCB5PUV0YVNxLCBmaWxsPVNpdGUpKSsNCiAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsNCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9U2l0ZS5jb2xvcnMubykrDQp0aGVtZV9jbGFzc2ljKCkrDQogIGdndGl0bGUoIkNobG9yb3BoeWxsIikrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyPSJibGFjayIsIHNpemU9cGFuZWwubGFiLnN6LCBoanVzdD0wLjUpLCANCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT1sZWcudHh0LnN6KSwgDQogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT1sZWcudGl0bGUuc3opLCANCiAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG9yID0gImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249YyguOSwgLjgpKSsNCiAgIGxhYnMoeD0iVGltZSBQb2ludCIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgiT3JpZ2luIEVmZmVjdCBTaXplIChwIiwgZXRhXjIsICIpIikpLCBjb2xvdXI9IlNpdGUiKSsNCiAgeWxpbSgwLCAwLjYpKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsPVNpZyksIHZqdXN0PS0wLjAyLCBjb2xvcj0iYmxhY2siLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgwLjkpLCBzaXplPWxldmVscy5zeiwgZm9udGZhY2U9ImJvbGQiKTsgQ2hsLkVTLnBsb3QNCg0KYGBgDQoNCg0KIyBGaWd1cmVzDQoNCiMjIyBGaWd1cmUgMyBVbml2YXJpYXRlIFBoeXNpb2xvZ3kNCg0KIyMjIyBBZGp1c3QgZm9yIFBhbmVsDQpgYGB7cn0NCiMjQmlvbWFzcyBIb3N0DQpUUDFfQmlvSG9zdC5wbG90PC1UUDFfQmlvSG9zdC5wbG90KyBnZ3RpdGxlKCJUUDEiKSsgbGFicyh4PSIiKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXI9ImJsYWNrIiwgc2l6ZT1wYW5lbC5sYWIuc3osIGZhY2U9ImJvbGQiLCBoanVzdD0wLjUpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC41LCAwLjg1KSwgbGVnZW5kLmRpcmVjdGlvbj0iaG9yaXpvbnRhbCIpKw0KICBndWlkZXMoY29sb3I9Z3VpZGVfbGVnZW5kKG5yb3c9MiwgYnlyb3c9RkFMU0UpKSANCg0KVFAyX0Jpb0hvc3QucGxvdDwtVFAyX0Jpb0hvc3QucGxvdCsgZ2d0aXRsZSgiVFAyIikrIGxhYnMoeD0iIiwgeT0iIikgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91cj0iYmxhY2siLCBzaXplPXBhbmVsLmxhYi5zeiwgZmFjZT0iYm9sZCIsIGhqdXN0PTAuNSksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249Im5vbmUiKQ0KDQpUUDNfQmlvSG9zdC5wbG90PC1UUDNfQmlvSG9zdC5wbG90KyBnZ3RpdGxlKCJUUDMiKSsgbGFicyh4PSIiLCB5PSIiKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyPSJibGFjayIsIHNpemU9cGFuZWwubGFiLnN6LCBmYWNlPSJib2xkIiwgaGp1c3Q9MC41KSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClRQNF9CaW9Ib3N0LnBsb3Q8LVRQNF9CaW9Ib3N0LnBsb3QrIGdndGl0bGUoIlRQNCIpKyBsYWJzKHg9IiIsIHk9IiIpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXI9ImJsYWNrIiwgc2l6ZT1wYW5lbC5sYWIuc3osIGZhY2U9ImJvbGQiLCBoanVzdD0wLjUpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJub25lIikNCg0KQmlvLkMuRVMucGxvdDwtQmlvLkMuRVMucGxvdCArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj1jKC4xNSwgLjgpKQ0KDQojI0Jpb21hc3MgU3ltYmlvbnQNClRQMV9CaW9TeW0ucGxvdDwtVFAxX0Jpb1N5bS5wbG90ICsgbGFicyh4PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClRQMl9CaW9TeW0ucGxvdDwtVFAyX0Jpb1N5bS5wbG90ICsgbGFicyh4PSIiLCB5PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClRQM19CaW9TeW0ucGxvdDwtVFAzX0Jpb1N5bS5wbG90ICsgbGFicyh4PSIiLCB5PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClRQNF9CaW9TeW0ucGxvdDwtVFA0X0Jpb1N5bS5wbG90ICsgbGFicyh4PSIiLCB5PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNCkJpby5TLkVTLnBsb3Q8LUJpby5TLkVTLnBsb3QgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKSANCg0KIyNQcm90ZWluIFN5bWJpb250DQpUUDFfUHJvdFN5bS5wbG90PC1UUDFfUHJvdFN5bS5wbG90ICsgbGFicyh4PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClRQMl9Qcm90U3ltLnBsb3Q8LVRQMl9Qcm90U3ltLnBsb3QgKyBsYWJzKHg9IiIsIHk9IiIpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikNCg0KVFAzX1Byb3RTeW0ucGxvdDwtVFAzX1Byb3RTeW0ucGxvdCArIGxhYnMoeD0iIiwgeT0iIikgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQ0KDQpUUDRfUHJvdFN5bS5wbG90PC1UUDRfUHJvdFN5bS5wbG90ICsgbGFicyh4PSIiLCB5PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClByb3QuUy5FUy5wbG90PC1Qcm90LlMuRVMucGxvdCArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpIA0KDQojI0NobG9yb3BoeWxsDQpUUDFfQ2hsLnBsb3Q8LVRQMV9DaGwucGxvdCArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClRQMl9DaGwucGxvdDwtVFAyX0NobC5wbG90ICsgbGFicyh5PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClRQM19DaGwucGxvdDwtVFAzX0NobC5wbG90ICsgbGFicyh5PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClRQNF9DaGwucGxvdDwtVFA0X0NobC5wbG90ICsgbGFicyh5PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNCkNobC5FUy5wbG90PC1DaGwuRVMucGxvdCArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQpgYGANCg0KDQojIyMjIEZpZ3VyZSAzDQpgYGB7cn0NCiMjQ3JlYXRlIFBhbmVsDQpQaHlzX2ZpZzwtcGxvdF9ncmlkKFRQMV9CaW9Ib3N0LnBsb3QsIFRQMl9CaW9Ib3N0LnBsb3QsIA0KICAgICAgICAgICAgICAgICAgICAgIFRQM19CaW9Ib3N0LnBsb3QsIFRQNF9CaW9Ib3N0LnBsb3QsIEJpby5DLkVTLnBsb3QsIA0KICAgICAgICAgICAgICAgICAgICAgIFRQMV9CaW9TeW0ucGxvdCwgVFAyX0Jpb1N5bS5wbG90LCANCiAgICAgICAgICAgICAgICAgICAgICBUUDNfQmlvU3ltLnBsb3QsIFRQNF9CaW9TeW0ucGxvdCwgQmlvLlMuRVMucGxvdCwgDQogICAgICAgICAgICAgICAgICAgICAgVFAxX1Byb3RTeW0ucGxvdCwgVFAyX1Byb3RTeW0ucGxvdCwgDQogICAgICAgICAgICAgICAgICAgICAgVFAzX1Byb3RTeW0ucGxvdCwgVFA0X1Byb3RTeW0ucGxvdCwgUHJvdC5TLkVTLnBsb3QsIA0KICAgICAgICAgICAgICAgICAgICAgIFRQMV9DaGwucGxvdCwgVFAyX0NobC5wbG90LCANCiAgICAgICAgICAgICAgICAgICAgICBUUDNfQ2hsLnBsb3QsIFRQNF9DaGwucGxvdCwgQ2hsLkVTLnBsb3QsDQogICAgICAgICAgICAgICAgICAgIHJlbF93aWR0aHM9YygwLjgsIDAuOCwgMC44LCAwLjgsIDEpLCByZWxfaGVpZ2h0cyA9IDEsDQogICAgICAgICAgICAgICAgICAgIG5yb3c9NCwgbmNvbD01LCBieXJvdz1ULCBsYWJlbHMgPSBOVUxMKQ0KDQojI1NhdmUgRmlndXJlDQpnZ3NhdmUoZmlsZW5hbWU9IkZpZ3VyZXMvMDJfUGh5c2lvbG9neS9GaWczX1BoeXNpb2xvZ3kucG5nIiwgcGxvdD1QaHlzX2ZpZywgZHBpPTMwMCwgd2lkdGg9MTYsIGhlaWdodD0xNiwgdW5pdHM9ImluIikNCg0KYGBgDQoNCg0KIyBUYWJsZXMgDQoNCiMjIyBUYWJsZSBTM0EgUGh5c2lvbG9neSBQRVJNQU5PVkEgYW5kIFBFUk1ESVNQDQpgYGB7cn0NCiMjQ29tYmluZSBSZXN1bHRzIFRhYmxlcw0KVGFibGVTM0FfUGh5cy5QRVJNPC1kYXRhLmZyYW1lKHJiaW5kKFBFUk1fVDEucmVzLCBQRVJNX1QyLnJlcywgUEVSTV9UMy5yZXMsIFBFUk1fVDQucmVzKSkNCg0KIyNPcmdhbml6ZQ0KbmFtZXMoVGFibGVTM0FfUGh5cy5QRVJNKQ0KVGFibGVTM0FfUGh5cy5QRVJNPC1UYWJsZVMzQV9QaHlzLlBFUk0gJT4lIGRwbHlyOjpyZW5hbWUoIERGID0gRGYsIFNTID0gU3VtT2ZTcXMsIEVmZmVjdFNpemUgPSBwYXJPbWVnYVNxLCBwID0gUHIuLkYuKQ0KVGFibGVTM0FfUGh5cy5QRVJNPC1UYWJsZVMzQV9QaHlzLlBFUk1bLGMoIlRpbWVwb2ludCIsICJQcmVkaWN0b3IiLCAiREYiLCAiU1MiLCAiRiIsICAgIkVmZmVjdFNpemUiLCAicCIsICJwX0RJU1AiKV0NCg0KI1JvdW5kIHRvIDMgZGlnaXRzDQpUYWJsZVMzQV9QaHlzLlBFUk0kU1M8LXJvdW5kKFRhYmxlUzNBX1BoeXMuUEVSTSRTUywgMykNClRhYmxlUzNBX1BoeXMuUEVSTSRGPC1yb3VuZChUYWJsZVMzQV9QaHlzLlBFUk0kRiwgMykNClRhYmxlUzNBX1BoeXMuUEVSTSRFZmZlY3RTaXplPC1yb3VuZChUYWJsZVMzQV9QaHlzLlBFUk0kRWZmZWN0U2l6ZSwgMykNClRhYmxlUzNBX1BoeXMuUEVSTSRwPC1yb3VuZChUYWJsZVMzQV9QaHlzLlBFUk0kcCwgMykNClRhYmxlUzNBX1BoeXMuUEVSTSRwX0RJU1A8LXJvdW5kKFRhYmxlUzNBX1BoeXMuUEVSTSRwX0RJU1AsIDMpDQoNCiMjV3JpdGUgT3V0IFRhYmxlDQp3cml0ZS5jc3YoVGFibGVTM0FfUGh5cy5QRVJNLCAiVGFibGVzL1RhYmxlUzNBX1BoeXNpb2xvZ3lfUEVSTV9SZXN1bHRzLmNzdiIsIHJvdy5uYW1lcz1GQUxTRSkNCg0KDQpgYGANCg0KDQojIyMgVGFibGUgUzQgUGh5c2lvbG9neSBVbml2YXJpYXRlIExNDQpgYGB7cn0NCiMjQ29tYmluZSBSZXN1bHRzIFRhYmxlcw0KVGFibGVTNF9QaHlzLkxNPC1kYXRhLmZyYW1lKHJiaW5kKFBoeXNfVDEucmVzLCBQaHlzX1QyLnJlcywgUGh5c19UMy5yZXMsIFBoeXNfVDQucmVzKSkNCg0KIyNPcmdhbml6ZQ0KbmFtZXMoVGFibGVTNF9QaHlzLkxNKQ0KVGFibGVTNF9QaHlzLkxNPC1UYWJsZVM0X1BoeXMuTE0gJT4lIGRwbHlyOjpyZW5hbWUoU0UgPSBTdGQuLkVycm9yLCBERiA9IGRmLCB0ID0gdC52YWx1ZSwgcCA9IFByLi4udC4uLCBFZmZlY3RTaXplID0gRXRhU3EsIFRpbWVwb2ludCA9IFRpbWVQKQ0KVGFibGVTNF9QaHlzLkxNPC1UYWJsZVM0X1BoeXMuTE1bLGMoIlRpbWVwb2ludCIsICJSZXNwb25zZSIsICJQcmVkaWN0b3IiLCAiRXN0aW1hdGUiLCAiU0UiLCAiREYiLCAidCIsICJwIiwgIkVmZmVjdFNpemUiKV0NCg0KI1JvdW5kIHRvIDMgZGlnaXRzDQpUYWJsZVM0X1BoeXMuTE0kRXN0aW1hdGU8LXJvdW5kKFRhYmxlUzRfUGh5cy5MTSRFc3RpbWF0ZSwgMykNClRhYmxlUzRfUGh5cy5MTSRTRTwtcm91bmQoVGFibGVTNF9QaHlzLkxNJFNFLCAzKQ0KVGFibGVTNF9QaHlzLkxNJHQ8LXJvdW5kKFRhYmxlUzRfUGh5cy5MTSR0LCAzKQ0KVGFibGVTNF9QaHlzLkxNJHA8LXJvdW5kKFRhYmxlUzRfUGh5cy5MTSRwLCAzKQ0KVGFibGVTNF9QaHlzLkxNJEVmZmVjdFNpemU8LXJvdW5kKFRhYmxlUzRfUGh5cy5MTSRFZmZlY3RTaXplLCAzKQ0KDQojSW50ZWdlcg0KVGFibGVTNF9QaHlzLkxNJERGPC1yb3VuZChUYWJsZVM0X1BoeXMuTE0kREYsIDApDQoNCiMjV3JpdGUgT3V0IFRhYmxlDQp3cml0ZS5jc3YoVGFibGVTNF9QaHlzLkxNLCAiVGFibGVzL1RhYmxlUzRfUGh5c2lvbG9neV9MTV9SZXN1bHRzLmNzdiIsIHJvdy5uYW1lcz1GQUxTRSkNCg0KYGBgDQoNCg==